Используйте переменные из iPython в скрипте - PullRequest
2 голосов
/ 03 августа 2011

Я хотел бы передать переменные, которые я определил в 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)

Так что я бы хотел, чтобы значения из x и y в iPython, какими бы они ни были (целые, диапазоны и т. Д.), Были бы видны из скрипта, который сейчас видит только строку «xy».

Как я могу получить эти значения при переносе из iPython в скрипт?Если это невозможно, что люди обычно делают в качестве обходного пути?

Спасибо!--Erin

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Возможно, вам будет полезно просмотреть источник модуля IPython.Magic, чтобы найти подсказки. Казалось бы, вы можете получить только один строковый аргумент в пользовательском магическом методе. Но я не могу найти ссылку на документ для подтверждения.

Хотя я думаю, что есть лучший способ сделать это, для вашего конкретного примера должно работать следующее:

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 голосов
/ 03 августа 2011

Работало нормально, когда я делал

rtp x, y
...