Larga historia corta: pythonw.exeno hace nada, no python.exeacepta 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.exeCon respecto al error de sintaxis:
printahora es una función en 3.xEntonces use en su lugar:
fuente
Para resumir y complementar las respuestas existentes:
python.exees una aplicación de consola (terminal) para iniciar scripts de tipo CLI .python.exeabre una nueva ventana de consola .sys.stdin,sys.stdoutysys.stderrse conecta a la ventana de la consola .La ejecución es sincrónica cuando se inicia desde una
cmd.exeventana de consola de PowerShell: consulte el primer comentario de eryksun a continuación.pythonw.exees una aplicación GUI para iniciar guiones GUI / no-UI-at-all .sys.stdin,sys.stdouty NOsys.stderrestá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.txtpara 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>&1Advertencia : esta técnica de redirección de salida no funciona al invocar
*.pywscripts 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 :
*.pylos archivos están asociados por defecto (invocados) conpython.exe*.pywlos archivos están asociados por defecto (invocados) conpythonw.exefuente
> pythonw ls.pyw >nul 2>&1(aunque no hay nada escrito).startcomando. Realmente inspecciona elPEBproceso 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.Popenpara adjuntar otrapython.exeinstancia 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.CreateProcessconbInheritHandlespasado comoTRUE. Solo vuelve a funcionarShellExecuteExcuandoCreateProcessfalla 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.exeopyw.exe, heredará de cmdStandardInput,StandardOutputyStandardError, lo que cmd (en realidad el CRT) modifica a través deSetStdHandleantes y después de llamarCreateProcesscuando E / S estándar es redirigido a una tubería, un archivo o dispositivo.STARTUPINFOidentificadores (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.exetiene 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 unacmdventana 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.exeaparecerá 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.exeevita esto, pero aún así envía el correo electrónico.fuente
python.exeserá 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