2009-04-22 20 views

Respuesta

16

Si hacer esto en un sistema operativo Windows, puede prefijar el destino de su acceso directo con:

C:\WINDOWS\system32\cmd.exe /K <command> 

Esto evitará la ventana de cierre cuando el comando sale.

+0

Para aquellos utilizando un archivo de proceso por lotes: Mi archivo por lotes anteriormente contenía la línea 'python -m Projects' para iniciar Python e importar automáticamente mi módulo de Proyectos. Cambié esto a 'cmd/K python -m Projects' y funcionó según lo anunciado, con la consola del cmd permaneciendo abierta después de un error. –

0

Su pregunta no es muy clara, pero asumo que el intérprete de python se cierra (y por lo tanto se cierra la ventana de la consola de llamadas) cuando ocurre una excepción.

Necesita modificar su aplicación de Python para atrapar la excepción e imprimirla sin salir del intérprete. Una forma de hacerlo es imprimir "presionar ENTER para salir" y luego leer alguna entrada desde la ventana de la consola, efectivamente esperando que el usuario presione Enter.

14
try: 
    #do some stuff 
    1/0 #stuff that generated the exception 
except Exception as ex: 
    print ex 
    raw_input() 
+1

Es posible que desee usar 'traceback.print_exc()' en lugar de 'ex' de impresión para el StackTrace más prolija –

7

Puede tener una segunda secuencia de comandos, que importa/ejecuta su código principal. Esta secuencia de comandos sería capturar todas las excepciones, e imprimir un rastreo (luego esperar a la entrada del usuario antes de terminar)

Asumiendo que su código está estructurado utilizando el lenguaje if __name__ == "__main__": main() ..

def myfunction(): 
    pass 

class Myclass(): 
    pass 

def main(): 
    c = Myclass() 
    myfunction(c) 

if __name__ == "__main__": 
    main() 

..y el archivo se denomina " myscriptname.py"(obviamente, que se pueden cambiar), el siguiente trabajo

from myscriptname import main as myscript_main 

try: 
    myscript_main() 
except Exception, errormsg: 
    print "Script errored!" 
    print "Error message: %s" % errormsg 
    print "Traceback:" 
    import traceback 
    traceback.print_exc() 
    print "Press return to exit.." 
    raw_input() 

(Tenga en cuenta que raw_input() ha sido sustituido por input() en Python 3)

Si usted no tiene una función main(), utilizaría poner la instrucción de importación en el bloque de try::

try: 
    import myscriptname 
except [...] 

Una solución mejor, uno que no requiere envoltura-scripts adicionales, es para ejecutar el script desde IDLE, o la línea de comando.

En Windows, vaya a Inicio> Ejecutar, ingrese cmd y escriba. A continuación, introduzca algo así ..

cd "\Path\To Your\ Script\" 
\Python\bin\python.exe myscriptname.py 

(Si ha instalado Python en C:\Python\)

En Linux/Mac OS X que es un poco más fácil, que acaba de ejecutar cd /home/your/script/ continuación python myscriptname.py

La manera más fácil sería usar IDLE, ejecutar IDLE, abrir el script y hacer clic en el botón de ejecución (F5 o Ctrl+F5, creo). Cuando la secuencia de comandos se cierra, la ventana no se cerrará automáticamente, por lo que puede ver cualquier error

Además, como Chris Thornhill sugirió, en Windows, puede crear un acceso directo a su secuencia de comandos, y en sus Propiedades prefija el objetivo con ..

C:\WINDOWS\system32\cmd.exe /K [existing command] 

De http://www.computerhope.com/cmd.htm:

/K command - Executes the specified command and continues running. 
3

En los sistemas UNIX (Windows ya ha sido cubierta por encima ...) puede cambiar el argumento intérprete para incluir la bandera -i:

#/usr/bin/python -i

De la página del manual:

-i

Cuando una secuencia de comandos se pasa como primer argumento o se utiliza la opción -c, entrar en modo interactivo después de ejecutar la secuencia de comandos o el comando. No lee el archivo $ PYTHONSTARTUP. Esto puede ser útil para inspeccionar variables globales o un seguimiento de pila cuando un script genera una excepción.

11

Puede registrar un manejador de excepciones de nivel superior que mantiene la aplicación vivo cuando se produce una excepción no controlada:

def show_exception_and_exit(exc_type, exc_value, tb): 
    import traceback 
    traceback.print_exception(exc_type, exc_value, tb) 
    raw_input("Press key to exit.") 
    sys.exit(-1) 

import sys 
sys.excepthook = show_exception_and_exit 

Esto es especialmente útil si tiene excepciones que ocurren dentro de los controladores de eventos que son llamadas desde C código, que a menudo no propagan los errores.

+0

+1, esto incluso funciona si la excepción es durante las importaciones, sin tener que volver a sangrar todo el archivo para probarlo. También funciona cuando * no * se ejecuta desde un archivo por lotes, por ejemplo, con ShellExecuteEx. –

+0

eso es genial gracias. –

+0

, pero ¿cuáles son esos argumentos 'exc_type, exc_value, tb'? (Estoy usando Python 3.6) –

1

En Windows, en lugar de hacer doble clic en el archivo py, puede arrastrarlo a una ventana de CMD ya abierta, y luego presionar enter. Se mantiene abierto después de una excepción.

Dan

0

si está utilizando ventanas se podía hacer esto

import os 

    #code here 

    os.system('pause') 
Cuestiones relacionadas