2012-05-16 3 views
15

Gibt es eine einfache Möglichkeit, auf Variablen im interaktiven IPython-Namespace zuzugreifen. Bei der Implementierung eines Projekts mit einem langsamen Ladebefehl möchte ich ein Skript ausführen, um die Daten in den interaktiven Arbeitsbereich zu laden, und dann ein zweites Skript aufrufen, das die Daten verwendet, wie es mit MATLAB möglich ist.Zugreifen auf Variablen aus dem interaktiven IPython-Namespace in einem Skript

In diesem einfachen Fall, was ich will tun, ist

In [20]: a=5 

In [21]: run tst 

wo tst.py nur

print a 

Die Idee ist, dass ich will einmal den Laden Skript auszuführen, dann nur arbeite an tst.py.

Danke!

Antwort

2

Es gibt keine einfache oder intelligente Möglichkeit, dies zu tun. Eine Möglichkeit wäre, eine main Funktion in Ihrer Testfunktion zu haben und dann die globals von Ihrer Umgebung zu übergeben, um die globals im Anrufer zu aktualisieren. Zum Beispiel:

tst.py

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

Und dann in ipython:

In [1]: a = 5 

In [2]: import tst 

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

Probieren Sie die Option -i auf IPython Zauberlauf-Befehl; Dadurch wird das Skript mit dem aktuellen interaktiven Namespace ausgeführt, z. mit

load.py:

a = 5 

tst.py:

print a 

Von IPython ich;

In [1]: from load import * 

In [2]: run -i tst 
5 
+0

Perfekt. Vielen Dank! – user1398968