Wenn Skript ipdb my_script.py
mit Python Debuggen, möchte ich IPython magische Funktionen wie %paste
, %cd
in ipdb
Debug-Session-Shell verwenden. Ist das möglich und wie?Verwenden IPython magische Funktionen in IPDB Shell
Antwort
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)
.
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?
Ich möchte die magischen Funktionen verwenden, ohne irgendwelche IPython-Funktionen in meinen Code zu importieren. – fossilet
warum? ist es nur eine Frage der persönlichen Bequemlichkeit? – gg349
@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
Können Sie den Kontext (z. B. lokale Variablen) von ipdb an 'cpaste' übergeben? –