Можно ли передать переменную из сеанса pdb в исходный интерактивный сеанс? - PullRequest
3 голосов
/ 11 июля 2009

Я использую pdb для проверки скрипта, вызвавшего run -d в сеансе ipython. Было бы полезно иметь возможность отобразить некоторые переменные, но для этого мне нужны они в основной среде ipython.

Итак, я ищу способ сделать переменную доступной в основном интерактивном сеансе после того, как я выйду из pdb. Если вы установите переменную в самом верхнем фрейме, она будет присутствовать в сеансе ipython, но это не сработает ни для одного фрейма ниже.

Что-то вроде export в следующем:

ipdb> myvar = [1,2,3]
ipdb> p myvar
[1, 2, 3]
ipdb> export myvar
ipdb> q

In [66]: myvar
Out[66]: [1, 2, 3]

1 Ответ

3 голосов
/ 11 июля 2009

На каждый ipython документы , а также команду run? из приглашения ipython,

после выполнения IPython интерактивное пространство имен получает обновлен всеми переменными, определенными в программе (кроме __name__ и sys.argv)

Под «определенным в программе» (слегка небрежным использованием терминов) это не означает «где-либо в любых найденных там вложенных функциях» - это означает «в globals() скрипта / модуля, который вы» re run ning. Если вы находитесь внутри любого вида вложенности, globals()['myvar'] = [1,2,3] все равно должен работать нормально, точно так же, как ваш ожидаемый export, если бы он существовал.

Редактировать : Если вы находитесь в другом модуле, вам нужно установить имя в глобальных словах вашего исходного - после import sys, если необходимо, sys.modules["originalmodule"].myvar = [1, 2, 3] будет делать то, что вы желание.

...