variable recognized not installed python python-2.7 windows-7 pythonw

recognized - .pyw y pythonw no se ejecutan en Windows 7



where is python installed on windows (7)

Esta es una respuesta antigua, pero también quiero dejar mi solución aquí:

  • Abrir CMD (con privilegios elevados o no, depende de sus necesidades)
  • Cambiar al directorio del script .py / .pyw : esto es importante
  • Ejecute pythonw con script como argumento

    cd E:/my/script/folder/ pythonw script.py

La ejecución de un archivo python simple .py o .pyw hace que python.exe aparezca en el Administrador de tareas.

python myApp.py python myApp.pyw

Sin embargo, cuando tratamos de ejecutarlo sin usar la consola, la secuencia de comandos no parece ejecutarse, ni python.exe o pythonw.exe aparecen bajo el Administrador de tareas

pythonw myApp.pyw pythonw myApp.py

¿Cómo solucionamos el problema? El sistema ejecuta Python 2.7.8 x64.


No estoy seguro de entender su problema, pero creo que esto es lo que necesita saber

necesita hacer clic derecho en un archivo py o pyw y seleccionar abrir con ... encontrar python.exe (probablemente C: / Python27 / python.exe) ... marcar la casilla que dice siempre abrir ... ahora puede simplemente duplicar haga clic en él si desea ejecutarlo

(generalmente el instalador lo configura para usted ...)


Intente agregar el sistema de import sys; sys.stderr = open("errlog.txt", "w") línea import sys; sys.stderr = open("errlog.txt", "w") import sys; sys.stderr = open("errlog.txt", "w") al inicio de myApp.py . Luego busque en errlog.txt un rastreo o cualquier otro mensaje de error.


Enfrenté el mismo problema en un script propio y descubrí que al agregar el resultado de la respuesta de Ross, el script realmente se ejecutaba.

Parece que, por alguna razón, la salida de redireccionamiento soluciona el problema. Como no estoy interesado en escribir el resultado en el disco, lo escribí en /dev/null (o el equivalente de la plataforma) con:

if ( sys.platform == ''win32'' and sys.executable.split( ''//' )[-1] == ''pythonw.exe''): sys.stdout = open(os.devnull, ''w'') sys.stderr = open(os.devnull, ''w'')

La instrucción if garantiza que solo se produce cuando la secuencia de comandos se inicia desde pythonw.exe . No estoy seguro de si está relacionado, pero era importante hacerlo antes de otras importaciones (incluido, por ejemplo, el import logging ).


Estaba teniendo un problema similar.

Después de depurar paso a paso al escribir en un archivo de registro, descubrí que pythonw.exe se colgó después de una declaración que intentó usar la llamada: sys.stdout.write (). Resulta que, cuando se ejecuta con pythonw.exe, sys.stdout es None.

Si está utilizando las funciones de sys.stdout / stderr / stdin, y tiene la intención de utilizar su programa con pythonw.exe, agregar una marca de "Ninguna" es una buena idea.


tl; dr

  • Para solucionar problemas , use la redirección de salida en la invocación:

    pythonw myApp.py 1>stdout.txt 2>stderr.txt

Esto capturará la salida stdout, como desde print() , en el archivo stdout.txt y salida de stderr (como desde excepciones no controladas), en el archivo stderr.txt ; de PowerShell, use
cmd /c pythonw myApp.py 1>stdout.txt 2>stderr.txt ).
Tenga en cuenta que el solo hecho de redireccionar stdout puede hacer que su script funcione de nuevo , si la única razón de su falla con pythonw fue el uso de print (en Python 2.x - ver más abajo).
Advertencia : esta técnica de redirección de salida aparentemente no funciona cuando se invocan scripts *.pyw directamente (en lugar de pasar la ruta del archivo de script a pythonw.exe ). Avíseme si sabe por qué y / o si funciona para usted.

  • Para arreglar tu script :

Coloque lo siguiente en la parte superior de cualquier secuencia de comandos de Python 2.xo 3.x que desee ejecutar con pythonw.exe :

import sys, os if sys.executable.endswith("pythonw.exe"): sys.stdout = open(os.devnull, "w"); sys.stderr = open(os.path.join(os.getenv("TEMP"), "stderr-"+os.path.basename(sys.argv[0])), "w")

Esto garantiza lo siguiente cuando se ejecuta una secuencia de comandos con pythonw.exe :

  • print() llamadas a print() y las llamadas explícitas a sys.stdout() se ignoran de manera efectiva (no son operaciones).
  • La salida de Stderr, incluida una excepción fatal no controlada , se envía al archivo %TEMP%/stderr-<scriptFileName> ; %TEMP% es una variable de entorno estándar de Windows que apunta a la carpeta del usuario actual para los archivos temporales.

En otras palabras: con el código anterior en su lugar, compruebe el archivo %TEMP%/stderr-<scriptFileName> después de que su secuencia de comandos haya fallado silenciosamente al invocarse con pythonw.exe .

Para una explicación, sigue leyendo.

En Windows, pythonw.exe es para pythonw.exe GUI / no-UI-at-all, lo que significa que las secuencias estándar de entrada y salida - sys.stdin , sys.stdout , sys.stderr NO están disponibles.

Esto tiene dos efectos secundarios desagradables :

  • El uso de print() , que se dirige a sys.stdout por defecto, causa una excepción en Python 2.x.
    • Este problema se ha solucionado en Python 3.x.
  • Cualquier excepción no controlada , incluida una activada por print() en 2.x, hace que la secuencia de comandos aborte silenciosamente .
    • Los mensajes de error de excepción van a sys.stderr de manera predeterminada, que es lo que no está disponible en este escenario.

El código anterior soluciona estos problemas de la siguiente manera:

  • enviando salida stdout al dispositivo nulo, ignorando efectivamente cualquier intento de salida a sys.stdout , ya sea explícita o implícitamente a través de print() .

  • enviando todos los resultados de stderr a un archivo temporal.

Diferencias entre Python 2.xy Python 3.x:

Cuando se ejecuta un script con pythonw.exe , sys.stdin , sys.stdout y sys.stderr :

  • en Python 2.x : tienen descriptores de archivos no válidos
    • El resultado final al intentar escribir en sys.stdout o sys.stderr es la siguiente excepción: IOError: [Errno 9] Bad file descriptor
    • Peligro: debido al almacenamiento en búfer de salida, esta excepción puede no aparecer hasta que haya emitido, digamos, 4K bytes ; puede provocarlo instantáneamente invocando pythonw.exe con -u (para salida sin búfer).
    • print() intenta ciegamente sys.stdout (de forma predeterminada), por lo que provoca esta excepción tarde o temprano.
  • en Python 3.x : están configurados en None
    • Esto se complementa con la función 3.x print() que realiza una sys.stdout no sys.stdout (no hacer nada) cuando descubre que sys.stdout es None , por lo que print() declaraciones print() se pueden utilizar de manera segura y segura: simplemente se ignorarán. cuando se ejecuta con pythonw.exe
    • Sin embargo, se deduce que intentar usar sys.stdout.write() y sys.stderr.write() aún genera una excepción.

Mira aquí para más información.


Tuve un problema similar después de una actualización a la memoria RAM de mi computadora. Resulta que tuve que volver a instalar Pillow (biblioteca utilizada para el procesamiento de imágenes). Por lo tanto, asegúrese de que esté instalado y, de no ser así, instálelo utilizando "Pilip install Pillow" en cmd.