2012-04-12 20 views
7

Uso la versión de Windows de Python. Tengo un script de Python usando Pyside (nada complicado, una especie de "hola mundo").¿Podemos saber si un script de Python se inicia desde Windows o un terminal de texto?

Cuando hago clic en el archivo de script o si lo inicio desde una línea de comando, se ejecuta perfectamente y aparece una GUI.

Sin embargo, me gustaría evitar tener una GUI si la secuencia de comandos se inicia desde un terminal de texto (cmd.exe, cygwin, ...). Un tipo de secuencia de comandos que automáticamente sabe si debe tener una salida de GUI o una salida de texto.

¿Existe una manera fácil y sencilla de hacerlo? Quiero poder hacer eso con la versión de Windows de Python (que no viene con los paquetes de Cygwin).

Una manera obvia sería agregar un tipo de parámetro "--no-gui" cuando ejecuto el script desde un terminal de texto, pero me pregunto si Python (o algunas bibliotecas de Python) ya proporcionan herramientas para eso.

Además, tengo un servidor SSH (Cygwin-base) en esta computadora, puedo ejecutar la secuencia de comandos a distancia pero no aparece la GUI (por supuesto) y no aparece ningún mensaje de error. Es un caso en el que es muy interesante saber si el script falló debido a la falta de soporte gráfico de Windows o si el script debe adaptar su salida para un terminal de texto.

+2

no su un duplicado ya que esta pregunta se refiere a Windows, pero la discusión en http://stackoverflow.com/questions/3818511/how-to-tell-if-python-script-is-being-run -in-a-terminal-or-via-gui puede ser útil. –

+1

más discusión también está aquí: http://stackoverflow.com/questions/1285024/how-can-i-check-to-see-if-a-python-script-was-started-interactively – Jiri

Respuesta

1

Sé que puede ejecutar el archivo como archivo .py o como archivo .pyw. La segunda opción se usa para aplicaciones de GUI y no abre la ventana de la consola. Para distinguir estos dos casos, puede marcar el isatty método de sys.stdout.

import sys 
if sys.stdout.isatty(): 
    # .py file is running, with console window 
    pass 
else: 
    # .pyw file is running, no console 
    pass 

EDITAR:

  • me trató de correr que con masilla + ssh en máquina Linux - devuelve True.
  • He intentado utilizar msys shell bash en caja de ventanas - devuelve True (archivo .py)
  • He intentado utilizar shell bash Cygwin con el pitón cygwin - devuelve True (archivo .py)
  • Por desgracia, No tengo la posibilidad de probar Putty + Windows Cygwin ssh server.
+0

También puede usar ' pythonw.exe' para ejecutar sin consola. – bereal

+0

Interesante, pero no funciona en todos los casos. Desde cmd.exe y al hacer clic en el archivo, isatty() es True para .py False para .pyw, por lo que su idea funciona bien. Desde cygwin y una sesión SSH (Putty y ssh para cygwin), isatty() es False (para recordar, utilizo la versión de Windows de Python, no la de Cygwin). ¿O extraño algo? –

+0

Lo siento mucho, pero lo probé una vez más, y al contrario de lo que dice su edición, no funciona con el intérprete de comandos Cygwin bash. ¿Qué versión de Python usaste? Estoy hablando específicamente de la versión de Windows de Python, no la que viene con los paquetes de Cygwin (estoy de acuerdo en que devuelve True por eso, pero la idea es usar Python para Windows). –

Cuestiones relacionadas