Accessing variables from IPython interactive names

2019-04-03 15:57发布

问题:

Is there an easy way to access variables in the IPython interactive namespace. While implementing a project that has a slow load command, I would like to run a script to load the data into the interactive work space, then call a second script that uses the data, like is possible with MATLAB.

In this simple case, what I want to do is

In [20]: a=5

In [21]: run tst

where tst.py is just

print a

The idea is that I want to run the loading script once, then just work on tst.py.

Thanks!

回答1:

Try using the -i option on IPython's magic run command; it makes the script run using the current interactive namespace, e.g. with

load.py:

a = 5

tst.py:

print a

From IPython I get;

In [1]: from load import *

In [2]: run -i tst
5


回答2:

There is no easy or smart way to do this. One way would be to have a main function in your test function and then pass in the globals from your environment to update the globals in the caller. For example:

tst.py

def main(borrowed_globals):
    globals().update(borrowed_globals)
    print a

And then in iPython:

In [1]: a = 5

In [2]: import tst

In [3]: tst.main(globals())
5