Как сохранить сессию ipython, если я использовал magic% paste? (magic% save не работает)

Кажется, довольно простой вопрос, но мне не удалось правильно сохранить сеанс ipython, используя магию "% save" Если я использую магическую "% paste" в любое время во время сеанса, сохранение результатов сеанса в этом выходе:

get_ipython().magic(u'paste')

Конечно, я бы хотел, чтобы вставленный код был сохранен.

Любые идеи?

Ответ 1

Я могу воспроизвести это с помощью версии 3.1.0 ipython на Ubuntu

$ ipython
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
Type "copyright", "credits" or "license" for more information.

IPython 3.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython features.
%quickref -> Quick reference.
help      -> Python own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: paste
def f(x):
    return 2**x
## -- End pasted text --

In [2]: f(4)
Out[2]: 16

In [3]: history
paste
f(4)
history

In [4]: save ptest.py 1-3
The following commands were written to file `ptest.py`:
get_ipython().magic(u'paste ')
f(4)
get_ipython().magic(u'history ')
In [5]: cat ptest.py
# coding: utf-8
get_ipython().magic(u'paste ')
f(4)
get_ipython().magic(u'history ')

In [6]: 

Но помощь для %save гласит, что

Эта функция использует тот же синтаксис, что и% history для диапазонов ввода, затем сохраняет строки в указанном вами файле.

и это на самом деле то, что происходит. Это только сохранение команд, которые вы вводите в командной строке, а введенная вами команда paste, которую магия преобразует в get_ipython().magic(u'paste ').

Интересно, что при попытке edit функция, созданная с помощью paste, помещает меня в vi, смотря на ту же магическую команду, а не на вставленную функцию.

В то время как первое поведение может не быть ошибкой (даже если это не особенно полезно), это поведение редактирования определенно похоже на одно.

Ответ 2

Как говорит kdopen, если вы используете %save

сохраняет только команды, которые вы вводите в командной строке

Если вы хотите записать ввод %paste, вы можете использовать %logstart, во время сеанса вы можете остановить и начать ведение журнала с помощью: %logoff/%logon

Подробнее о том, как использовать эту команду: logstart

Если вы хотите восстановить свой сеанс, забудьте запустить ipython с помощью опции командной строки -i yourlogfile.py. т.е.: ipython3 -i ipython_log.py