2012-05-16 11 views
15

Esiste un modo semplice per accedere alle variabili nello spazio dei nomi interattivo IPython. Durante l'implementazione di un progetto con un comando di caricamento lento, vorrei eseguire uno script per caricare i dati nello spazio di lavoro interattivo, quindi chiamare un secondo script che utilizza i dati, come è possibile con MATLAB.Accesso alle variabili dallo spazio dei nomi interattivo IPython in uno script

In questo semplice caso, quello che voglio fare è

In [20]: a=5 

In [21]: run tst 

dove tst.py è solo

print a 

L'idea è che voglio per eseguire lo script di carico una volta, poi basta lavorare su tst.py.

Grazie!

risposta

2

Non esiste un modo facile o intelligente per farlo. Un modo sarebbe quello di avere una funzione main nella funzione di test e quindi passare il globals dal proprio ambiente per aggiornare globals nel chiamante. Per esempio:

tst.py

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

E poi nel ipython:

In [1]: a = 5 

In [2]: import tst 

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

Provare a utilizzare l'opzione -i in ordine di marcia magico di IPython; rende lo script eseguito utilizzando lo spazio dei nomi interattivo corrente, ad es. con

load.py:

a = 5 

tst.py:

print a 

Da IPython ottengo;

In [1]: from load import * 

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

Perfetto. Grazie! – user1398968

Problemi correlati