Доступ к переменным из интерактивного пространства имен 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