在脚本中使用iPython中的变量

时间:2011-08-03 14:27:48

标签: python ipython

我想将我在iPython中定义的变量传递给python脚本。

例如:

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

脚本在哪里:

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)

所以我喜欢iPython中x和y的值,无论它们是什么(整数,范围等)都可以从脚本中看到,现在只看到字符串“x y”。

如何在从iPython到脚本的传输中获取这些值?如果不可能,人们通常做什么作为解决方法?

谢谢! --Erin

2 个答案:

答案 0 :(得分:1)

您可能会发现浏览IPython.Magic模块的source以获取线索非常有用。看起来你只能在自定义魔术方法中获得一个字符串参数。但我似乎无法找到证实的文件参考。

虽然我认为有更好的方法可以实现这一目标,但以下内容适用于您的具体示例:

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)

答案 1 :(得分:0)

我做的时候工作正常

rtp x, y