2010-01-28 14 views
65

ejecutar tengo un módulo de Python con una función:caer en intérprete de Python mientras que la función

def do_stuff(param1 = 'a'): 
    if type(param1) == int: 
     # enter python interpreter here 
     do_something() 
    else: 
     do_something_else() 

hay una manera de caer en la línea de intérprete de comandos donde tengo el comentario? de manera que si corro el siguiente en Python:

>>> import my_module 
>>> do_stuff(1) 

consigo mi siguiente indicador en el alcance y el contexto de donde tengo el comentario en do_stuff()?

+0

duplicado posible de [Entrar en el modo interactivo En Python] (http://stackoverflow.com/questions/13432717/enter-interactive-mode-in-python) –

Respuesta

42

Inserción

import pdb; pdb.set_trace() 

entra en el depurador de pitón en ese punto

Ver aquí: http://docs.python.org/library/pdb.html

+0

'pdb' es grande pitón vainilla; si tiene espacio para traer un paquete externo, 'ipdb' es genial - la misma funcionalidad que el depurador, pero con el resaltado de sintaxis, la terminación de pestañas, etc. de ipython – khstacking

115

Si desea una pronta interactiva estándar (en lugar del depurador, como se muestra por prestomation), puede hacer esto:

import code 
code.interact(local=locals()) 

Ver: el code module.

Si tiene instalado IPython, y desea una IPython cáscara en su lugar, se puede hacer esto por IPython> = 0,11:

import IPython; IPython.embed() 

o para versiones anteriores:

from IPython.Shell import IPShellEmbed 
ipshell = IPShellEmbed() 
ipshell(local_ns=locals()) 
+27

para IPython> = 0.11, no hay más módulos Shell en IPython ... así que empiece usando "import IPython; IPython.embed()" en su lugar. – evandrix

+0

¿Es posible continuar después de ingresar 'code.interact()', a la PDB 'c (ontinue)'? –

+3

'code.interact()' es una llamada de bloqueo. Tu programa se detendrá y esperará a que termine. Si sale del intérprete interactivo, su programa debe reanudarse con la declaración inmediatamente siguiente. –

14

Si desea una intérprete predeterminado de Python, puede hacer

import code 
code.interact(local=dict(globals(), **locals())) 

Esto permitirá el acceso a locales y globales.

Si desea utilizar un intérprete de IPython, la solución IPShellEmbed es obsoleta. Actualmente lo que funciona es:

from IPython import embed 
embed() 
+4

gracias,' code.interact (local = dict (globals(), ** locals())) 'es tan mucho mejor que 'código.interactuar (local = locals()) 'porque este último te hace volver a importar paquetes – s2t2

+0

Esta respuesta funcionó mejor para mí ya que estaba usando un script bash para llamar a mi código python. No pude interactuar con mi código python con la respuesta aceptada. ¡Gracias! – jonathanking

Cuestiones relacionadas