2012-08-03 15 views
9

Necesito ejecutar mi secuencia de comandos de Python como de costumbre, pero quiero detener la ejecución en una línea específica y comenzar el modo interactivo.iniciar el modo interactivo en una línea de secuencia de comandos específica

En otras palabras, quiero poder verificar el valor de todas mis variables en ese punto y continuar desde allí en la línea de comando de python.

¿Cómo puedo hacer esto?

+0

A.k. ¿modo de depuración? –

+0

Si el modo de depuración es lo que describí anteriormente, ¡entonces sí! –

+0

Siempre que intente depurar su código, los métodos en las respuestas son la forma en que debe ir. Si realmente necesita este tipo de funcionalidad como usuario en lugar de como desarrollador de su secuencia de comandos, debe buscar maneras de tomar las aportaciones del usuario durante la ejecución del script o reorganizar su código en funciones, métodos y módulos. –

Respuesta

16

Esto se puede hacer con el módulo code. La forma más fácil es llamar al code.interact().

+0

¿Estás seguro? Parece que abre un shell de python, y eso es todo. No puedo buscar ninguna variable que definí antes de 'code.interact()' en mi código, así que realmente no veo cómo usar esta función. –

+3

@Ricky Debe usar el argumento 'local':' code.interact (local = locals()) '. –

+1

@lazyr en realidad, es 'code.interact (local = locals())' :-) – sloth

9

Utilice un depurador y agregue puntos de interrupción. ¿Usas un IDE? Todos los principales IDE tienen soporte para depuradores. Desde la CLI, puede usar pdb.

+4

'import pdb; pdb.set_trace() 'hará el truco. –

4

No es exactamente lo que estás buscando, pero usted puede fácilmente tener su programa de romper a AP (el depurador de Python) mediante la adición de esta línea dondequiera que usted quiere que su programa para salir:

import pdb; pdb.set_trace() 

Usted a continuación, puede comprobar fácilmente las variables de la siguiente manera:

p variable_name 

también puede dar un paso, continuar etc.

Más detalles sobre pdb here.

2

A menos que necesite esto para fines de producción de la mejor manera, en mi opinión, es el uso de depurador interactivo:

http://infohost.nmt.edu/tcc/help/pubs/python/web/pdb.html

http://onlamp.com/pub/a/python/2005/09/01/debugger.html

para otros fines consideren la posibilidad de tal vez haciendo aspectos en su código, usando decoradores para obtener características de tiempo de ejecución de la clase de método:

http://www.cs.tut.fi/~ask/aspects/index.shtml

http://www.linuxtopia.org/online_books/programming_books/python_programming/python_ch26.html

Cuestiones relacionadas