2011-08-03 6 views
2

Je voudrais passer les variables que j'ai définies dans iPython dans un script python.Utiliser des variables d'iPython dans un script

Par exemple:

In [1]: import demo 
In [2]: x = [1, 2, 3] 
In [3]: y = [1, 2, 3] 
In [4]: rtp x y 

Lorsque le script est:

import IPython.ipapi 
ip = IPython.ipapi.get() 

def run_this_plot(*args): 
    """ Run 
    Examples 
    In [1]: import demo 
    In [2]: rtp x y <z> 
    Where x, y, and z are numbers of any type 
    """ 
    print "args: ", args 
    # Do something here with args, such as plot them 

# Activate the extension 
ip.expose_magic("rtp", run_this_plot) 

Je voudrais donc les valeurs de x et y dans ipython, quels qu'ils soient (ints, plages, etc.) à voir à partir du script, qui en ce moment ne voit que la chaîne "xy".

Comment puis-je obtenir ces valeurs dans le transfert d'iPython vers un script? Si ce n'est pas possible, que font habituellement les gens pour contourner le problème?

Merci! --Erin

Répondre

1

Vous trouverez peut-être utile de parcourir le source du module IPython.Magic des indices. Il semblerait que vous ne pouvez obtenir qu'un seul argument de chaîne dans une méthode magique personnalisée. Mais je n'arrive pas à trouver une référence doc pour confirmer.

Alors que je pense qu'il ya une meilleure façon d'y parvenir, ce qui suit devrait fonctionner pour votre exemple précis:

import IPython.ipapi 
ip = IPython.ipapi.get() 

def run_this_plot(self, arg_s=''): 
    """ Run 
    Examples 
    In [1]: import demo 
    In [2]: rtp x y <z> 
    Where x, y, and z are numbers of any type 
    """ 
    args = [] 
    for arg in arg_s.split(): 
     try: 
      args.append(self.shell.user_ns[arg]) 
     except KeyError: 
      raise ValueError("Invalid argument: %r" % arg) 
    print "args: ", args 
    # Do something here with args, such as plot them 

# Activate the extension 
ip.expose_magic("rtp", run_this_plot) 
+0

Merci, c'est exactement ce que je cherchais. Avec les valeurs x et y définies, rtp x y imprime maintenant les valeurs correctes. –

+0

N.B. La source a depuis longtemps déménagé: https://github.com/ipython/ipython –

0

Il a bien fonctionné quand je l'ai

rtp x, y 
+0

C'est étrange. Je reçois toujours une sortie de chaîne - 'x, y' quand j'utilise cette ligne. Python reconnaît-il aussi les types corrects de vos variables x, y? –

+0

Version IPython? –

+0

J'utilise Python 2.7 et iPython 0.10.1 Win 32. –

Questions connexes