像在MATLAB中一样在IPython中保存会话?

Nav*_*eet 21 python ipython pandas

保存可以在稍后阶段轻松加载到内存中的会话变量将是有用的.

unu*_*tbu 13

In [23]: %logstart /tmp/session.log
Activating auto-logging. Current session state plus future input saved.
Filename       : /tmp/session.log
Mode           : backup
Output logging : False
Raw input log  : False
Timestamping   : False
State          : active

In [24]: x = 1

In [25]: %logstop

In [26]: quit()
Do you really want to exit ([y]/n)? y
Run Code Online (Sandbox Code Playgroud)

然后我们可以恢复会话:

% ipython -log /tmp/session.log 
Activating auto-logging. Current session state plus future input saved.
Filename       : ipython_log.py
...

In [1]: x
Out[1]: 1
Run Code Online (Sandbox Code Playgroud)

有关"会话日志记录和还原"的更多信息,请参阅文档.

请注意,这仅存储由IPython运行的命令.它不保存IPython会话的状态.恢复会话需要重新执行命令.


如果将PYTHONSTARTUP环境变量设置为指向名为的文件,例如startup.py:

PYTHONSTARTUP=/path/to/startup.py
Run Code Online (Sandbox Code Playgroud)

然后将以下内容放在/path/to/startup.py中:

try:
    # https://stackoverflow.com/a/5377051/190597 (Tom Dunham)
    __IPYTHON__
except NameError:
    pass
else:
    # https://stackoverflow.com/a/15898875/190597 (user2261139)
    from IPython import get_ipython
    ipython = get_ipython()
    ipython.magic("%logstart /tmp/session.log")
Run Code Online (Sandbox Code Playgroud)

然后,每当您启动交互式会话时,IPython都会自动调用%logstart.

  • 为什么接受这个答案?这并没有解决保存会话中定义的所有变量和数据的问题(对于我的Python知识没有一个干净的解决方案). (25认同)
  • 好.据我所知,如果您在定义这些变量之前了解它,那么它就是解决方案.另一种方法是在启动ipython命令行时弄清楚默认情况下如何运行它. (2认同)