2013-04-24 4 views

ответ

12

В соответствии с ipdb Github repo функции магического IPython недоступны. К счастью, IPython debugger дает пару подсказок о том, как получить эту функциональность, не запуская отдельную оболочку IPython.

Вот что я сделал, чтобы запустить %cpaste:

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 

Таким образом, вы можете пройти через код и иметь доступ ко всем магическим функциям IPython с помощью метода find_line_magic(your_magic_function).

+0

Можете ли вы передать контекст (например, локальные переменные) ipdb на 'cpaste'? –

9

Вы можете открыть оболочку IPython внутри стека, как это делает pdb. Выполните следующие действия:

  • Импортируйте embed() из IPython и поместите его в свой код.
  • Запуск сценария

Пример:

from IPython import embed 

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

В оболочке Python:

>>> te.func() 

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

In [1]: %whos 

Variable Type Data/Info 
i   int  0 

In [2]: 

Было ли это то, что вы искали?

+1

Я хотел бы использовать магические функции без импорта каких-либо функций IPython в свой код. – fossilet

+0

Почему? это просто вопрос личного удобства? – gg349

+1

@flebool, было бы довольно удобно получить доступ к магическим функциям везде и всякий раз, когда моя программа будет остановлена ​​(приостановлена) отладчиком без необходимости кода точек останова в моей программе. – fossilet

Смежные вопросы