Доступ к переменным из интерактивного пространства имен IPython в script
Есть ли простой способ доступа к переменным в интерактивном пространстве имен IPython. При реализации проекта с командой медленной загрузки я хотел бы запустить script для загрузки данных в интерактивное рабочее пространство, а затем вызвать второй script, который использует данные, как это возможно в MATLAB.
В этом простом случае я хочу сделать
In [20]: a=5
In [21]: run tst
где tst.py - это просто
print a
Идея состоит в том, что я хочу запустить загрузку script один раз, а затем просто работать с tst.py.
Спасибо!
Ответы
Ответ 1
Попробуйте использовать опцию -i в команде запуска IPython magic run; он запускает script, используя текущее интерактивное пространство имен, например. с
load.py:
a = 5
tst.py:
print a
Из IPython я получаю:
In [1]: from load import *
In [2]: run -i tst
5
Ответ 2
Нет простого и умного способа сделать это. Одним из способов было бы иметь функцию main
в вашей тестовой функции, а затем передать в globals
из вашей среды, чтобы обновить globals
в вызывающем. Например:
tst.py
def main(borrowed_globals):
globals().update(borrowed_globals)
print a
И затем в iPython:
In [1]: a = 5
In [2]: import tst
In [3]: tst.main(globals())
5