2013-04-24 2 views

Antwort

12

Entsprechend der ipdb Github repo sind magische IPython-Funktionen nicht verfügbar. Glücklicherweise bietet die IPython debugger ein paar Hinweise, wie man diese Funktionalität erhält, ohne eine separate IPython-Shell zu starten.

Hier ist, was ich tat %cpaste auszuführen:

ipdb> from IPython import get_ipython 
ipdb> shell = get_ipython() 
ipdb> shell.find_line_magic('cpaste')() 
Pasting code; enter '--' alone on the line to stop or use Ctrl-D. 
:for i in range(0,5): 
:  print i 
:-- 
0 
1 
2 
3 
4 

Auf diese Weise können Sie durch den Code Schritt und haben Zugriff auf alle IPython magischen Funktionen über das Verfahren find_line_magic(your_magic_function).

+0

Können Sie den Kontext (z. B. lokale Variablen) von ipdb an 'cpaste' übergeben? –

9

Sie können eine IPython-Shell in einem Stapel öffnen, genau wie pdb. Gehen Sie folgendermaßen vor:

  • Importieren Sie Embed() von IPython, und legen Sie es in Ihrem Code.
  • die

Beispiel Skript ausführen:

from IPython import embed 

def some_func(): 
    i = 0 
    embed() 
    return 0 

In Python-Shell:

>>> te.func() 

IPython 1.0.0 -- An enhanced Interactive Python. 
(...) 

In [1]: %whos 

Variable Type Data/Info 
i   int  0 

In [2]: 

War es das, was Sie suchen?

+1

Ich möchte die magischen Funktionen verwenden, ohne irgendwelche IPython-Funktionen in meinen Code zu importieren. – fossilet

+0

warum? ist es nur eine Frage der persönlichen Bequemlichkeit? – gg349

+1

@flebool, es wäre sehr praktisch, auf die magischen Funktionen zuzugreifen, egal wo und wann mein Programm vom Debugger angehalten (suspendiert) wird, ohne Breakpoints in meinem Programm programmieren zu müssen. – fossilet