Larga historia corta: pythonw.exe
no hace nada, no python.exe
acepta nada (¿cuál debo usar?)
test.py:
print "a"
Ventana CMD:
C:\path>pythonw.exe test.py
<BLANK LINE>
C:\path>
C:\path>python.exe test.py
File "C:\path\test.py", line 7
print "a"
^
SyntaxError: invalid syntax
C:\path>
Por favor dime que estoy haciendo terriblemente mal.
python
python-3.x
trabajo
fuente
fuente
Respuestas:
Si no desea que aparezca una ventana de terminal cuando ejecute su programa, use
pythonw.exe
;De lo contrario, use
python.exe
Con respecto al error de sintaxis:
print
ahora es una función en 3.xEntonces use en su lugar:
fuente
Para resumir y complementar las respuestas existentes:
python.exe
es una aplicación de consola (terminal) para iniciar scripts de tipo CLI .python.exe
abre una nueva ventana de consola .sys.stdin
,sys.stdout
ysys.stderr
se conecta a la ventana de la consola .La ejecución es sincrónica cuando se inicia desde una
cmd.exe
ventana de consola de PowerShell: consulte el primer comentario de eryksun a continuación.pythonw.exe
es una aplicación GUI para iniciar guiones GUI / no-UI-at-all .sys.stdin
,sys.stdout
y NOsys.stderr
están disponibles .print()
puede hacer que eso suceda (en 3.x,print()
simplemente no tiene efecto).pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
(desde PowerShell:)
cmd /c pythonw.exe yourScript.pyw 1>stdout.txt 2>stderr.txt
para capturar salidas stdout y stderr en archivos .Si está seguro de que el uso de
print()
es la única razón por la que su script falla en silenciopythonw.exe
, y no está interesado en la salida estándar, use el comando @ handle de los comentarios:pythonw.exe yourScript.pyw 1>NUL 2>&1
Advertencia : esta técnica de redirección de salida no funciona al invocar
*.pyw
scripts directamente ( en lugar de pasar la ruta del archivo de script apythonw.exe
). Vea el segundo comentario de eryksun y sus seguimientos a continuación.Puede controlar cuál de los ejecutables ejecuta su script de forma predeterminada , como cuando se abre desde Explorer, eligiendo la extensión de nombre de archivo correcta :
*.py
los archivos están asociados por defecto (invocados) conpython.exe
*.pyw
los archivos están asociados por defecto (invocados) conpythonw.exe
fuente
> pythonw ls.pyw >nul 2>&1
(aunque no hay nada escrito).start
comando. Realmente inspecciona elPEB
proceso secundario para determinar si es un proceso de consola. El proceso de host de la consola (conhost.exe) no se preocupa por esto. Si usassubprocess.Popen
para adjuntar otrapython.exe
instancia a la consola actual y no lo haceswait
, entonces tendrás un lío confuso de ambos procesos corriendo para acceder a la consola simultáneamente.NtCreateUserProcess
. Si el ejecutable de destino es un programa de consola, el sistema hereda incondicionalmente los identificadores estándar de los padres. Pero para un programa que no es de consola, se requiere que se le diga explícitamente que herede los identificadores heredables del padre. Para ejecutar un archivo basado en una asociación de archivos, cmd llamaShellExecuteEx
, que no hereda explícitamente los identificadores cuando llama aCreateProcess
=>NtCreateUserProcess
. En consecuencia, la redirección de E / S estándar funciona en cmd al iniciar los scripts .py de consola, pero no los scripts .pyw que no son de consola.CreateProcess
conbInheritHandles
pasado comoTRUE
. Solo vuelve a funcionarShellExecuteEx
cuandoCreateProcess
falla porque el objetivo no es un ejecutable PE (por ejemplo, es un script .py) o requiere elevación (por ejemplo, osk.exe). Así que cuando se ejecuta directamentepythonw.exe
opyw.exe
, heredará de cmdStandardInput
,StandardOutput
yStandardError
, lo que cmd (en realidad el CRT) modifica a través deSetStdHandle
antes y después de llamarCreateProcess
cuando E / S estándar es redirigido a una tubería, un archivo o dispositivo.STARTUPINFO
identificadores (hStdInput, hStdOutput, hStdErr), a diferencia de Pythonsubprocess.Popen
. Puede salirse con la suya porque es un programa de subproceso único. Es solo debido a este diseño que la redirección funciona en absolutoShellExecuteEx
(solo para los programas de consola, como se señaló) porque la API de shell GUI no tiene soporte para E / S estándar.Ver aquí: http://docs.python.org/using/windows.html
pythonw.exe "Esto suprime la ventana de terminal al inicio".
fuente
pythonw.exe
tiene efectos secundarios que su programa puede fallar en silencio si escribe en stdout / stderr stream - vea bugs.python.org/issue706263Si va a llamar a un script de Python desde algún otro proceso (por ejemplo, desde la línea de comandos), use
pythonw.exe
. De lo contrario, su usuario verá continuamente unacmd
ventana que inicia el proceso de Python. Seguirá ejecutando su script de la misma manera, pero no interferirá con la experiencia del usuario.Un ejemplo podría ser enviar un correo electrónico;
python.exe
aparecerá una ventana de CLI, enviará el correo electrónico y luego cerrará la ventana. Aparecerá como un flash rápido, y puede considerarse algo molesto.pythonw.exe
evita esto, pero aún así envía el correo electrónico.fuente
python.exe
será no abrir otra.Estaba luchando para que esto funcionara por un tiempo. Una vez que cambie la extensión a .pyw, asegúrese de abrir las propiedades del archivo y dirigir la ruta "abrir con" a pythonw.exe.
fuente
En mi experiencia, pythonw.exe es más rápido al menos con el uso de pygame.
fuente