Mantenga la consola de Windows abierta después de un error de Python

Las asociaciones de archivos en mi máquina (winxp home) son tales que un script de python se abre directamente con el intérprete de python. Si hago doble clic en un script de Python, se ejecuta una ventana de consola y todo está bien, siempre que no haya un error de syntax en el script.

En ese caso, la ventana de la consola se abre por un momento, pero se cierra inmediatamente. Demasiado rápido para leer el mensaje de error.

Por supuesto, tendrían la posibilidad de abrir manualmente una ventana de consola y ejecutar el script escribiendo python myscript.py pero estoy seguro de que hay una solución más conveniente (es decir, “basada en doble clic”).

Hacer un archivo por lotes:

 C:\Python26\python.exe %1 IF %ERRORLEVEL% NEQ 0 PAUSE 

Use eso como su asociación de archivos en lugar de python.exe directamente. Esto solo hará que la instrucción PAUSE se ejecute si python.exe devuelve un error

La forma canónica de ejecutar un comando en una ventana del símbolo del sistema que no se cierra es

 cmd /k "your command" 

Dejé un comentario en la respuesta de rossipedia sobre una situación similar, pero dudo que se notará en un post de 8 años. Así que, yo mismo he experimentado.

Tengo una secuencia de comandos de Python que procesa una carpeta que se coloca en él. A medida que agrego nuevas líneas, a veces recibo errores de syntax y no puedo verlos porque la ventana del símbolo del sistema se cierra demasiado rápido. Para mantener la ventana abierta después de un error, tuve que modificar el código de rossipedia. Necesitaba una forma de pasar una ruta al archivo bat (colocar una carpeta en él) y hacer que la barra pasara esa ruta al script de python. Lo siguiente hace eso:

debug.bat :

 @echo off REM debug.bat and myscript.py should be in the same dir, otherwise use absolute path for the python script C:\Users\%username%\AppData\Local\Programs\Python\Python36-32\python.exe "%~dp0\myscript.py" %1 IF %ERRORLEVEL% NEQ 0 PAUSE 

myscript.py :

 import sys print("printing dropped file path:") print(sys.argv[1]) input() 

Si recibo un error, solo uso debug.bat para ver el error, y funciona igual (coloca una carpeta en él).

Actualizar:

En mi script de python real, tengo esta línea:

 sys.path.append("modules") 

Esto no funciona cuando uso debug.bat . “modules” es una carpeta que está en la misma carpeta con el script de python. Cuando se llama al script con debug.bat, el directorio de trabajo actual cambia al directorio del archivo soltado. Entonces, para obtener la ruta a “módulos”, tuve que usar la ruta absoluta:

 sys.path.append(os.path.dirname(os.path.abspath(__file__)) + "\\modules") 

La forma en que lo hago es hacer clic con el botón derecho en el script que guardé del bloc de notas en un archivo .py, luego hago clic en editar con IDLE. Esto es una cosa de edición, pero también puedes ejecutar módulos desde este.