script
的东西,我会得到太多的stdout噪音。我真的不需要将所有对象都pickle起来——虽然如果有一个能够这样做的解决方案,那就好了。理想情况下,我只需要留下一个运行与我创建的交互式脚本相同的脚本,我可以删除我不需要的部分。是否有一个可以实现这个功能的软件包或DIY方法?script
的东西,我会得到太多的stdout噪音。我真的不需要将所有对象都pickle起来——虽然如果有一个能够这样做的解决方案,那就好了。理想情况下,我只需要留下一个运行与我创建的交互式脚本相同的脚本,我可以删除我不需要的部分。是否有一个可以实现这个功能的软件包或DIY方法?IPython非常有用,如果你喜欢使用交互式会话。例如,对于你的用例,可以使用%save
魔法命令,只需输入%save my_useful_session 10-20 23
,即可保存输入的第10到20行和第23行到my_useful_session.py
(为了帮助这点,每一行都有它的编号)。
此外,文档还指出:
这个函数使用与
%history
魔法命令相同的语法来指定输入范围,然后将这些行保存到您指定的文件名中。
这允许例如引用旧的会话,比如:
%save current_session ~0/
%save previous_session ~1/
以下内容来自 Andrew Jones 的网站 (存档):
import readline
readline.write_history_file('/home/ahj/history')
有一种方法可以实现。将文件存储在~/.pystartup
中...
# Add auto-completion and a stored history file of commands to your Python
# interactive interpreter. Requires Python 2.0+, readline. Autocomplete is
# bound to the Esc key by default (you can change it - see readline docs).
#
# Store the file in ~/.pystartup, and set an environment variable to point
# to it: "export PYTHONSTARTUP=/home/user/.pystartup" in bash.
#
# Note that PYTHONSTARTUP does *not* expand "~", so you have to put in the
# full path to your home directory.
import atexit
import os
import readline
import rlcompleter
historyPath = os.path.expanduser("~/.pyhistory")
def save_history(historyPath=historyPath):
import readline
readline.write_history_file(historyPath)
if os.path.exists(historyPath):
readline.read_history_file(historyPath)
atexit.register(save_history)
del os, atexit, readline, rlcompleter, save_history, historyPath
然后在你的shell中设置环境变量PYTHONSTARTUP
(例如,在~/.bashrc
中):
export PYTHONSTARTUP=$HOME/.pystartup
你还可以添加以下内容来免费获得自动完成:
readline.parse_and_bind('tab: complete')
请注意,这仅适用于*nix系统。因为readline仅在Unix平台上可用。readline.parse_and_bind('tab: complete')
可正常工作。 - Phillip Cloudsave
命令保存文件的位置,这非常有帮助。 - alpha_989ipython
只需从您的命令行运行以下Ipython“魔术”命令,即可自动记录您的整个Ipython会话:
%logstart
这将创建一个带有唯一名称的.py文件,并将您的会话存储以便稍后用作交互式Ipython会话或用于您选择的脚本中。
此外,reinteract 可以为你提供类似笔记本的界面来查看 Python 会话。
reinteract
现已被 IPython Notebook 和 QtConsole 取代。 - Eric O. Lebigot我必须努力寻找答案,因为我对iPython环境非常陌生。
这将起作用。
如果您的iPython会话看起来像这样
In [1] : import numpy as np
....
In [135]: counter=collections.Counter(mapusercluster[3])
In [136]: counter
Out[136]: Counter({2: 700, 0: 351, 1: 233})
如果您想保留从1到135行的内容,然后在同一个IPython会话中使用此命令:
In [137]: %save test.py 1-135
这将把您所有的Python语句保存在test.py文件中,该文件位于您当前的目录中(即您启动IPython的位置)。
除了IPython外,类似的工具bpython还具有“将输入的代码保存到文件”的功能。
有一个%history魔法命令可以打印和保存输入历史记录(以及可选的输出)。
要将当前会话存储到名为my_history.py
的文件中:
>>> %hist -f my_history.py
历史记录 IPython 存储您输入的命令和产生的结果。您可以使用上下箭头键轻松浏览以前的命令,或以更复杂的方式访问您的历史记录。
您可以使用 %history 魔法函数来查看过去的输入和输出。来自以前会话的输入历史记录保存在数据库中,并且可以配置 IPython 以保存输出历史记录。
还有几个其他魔法函数可以使用您的输入历史记录,包括 %edit、%rerun、%recall、%macro、%save 和 %pastebin。您可以使用标准格式引用行:
%pastebin 3 18-20 ~1/1-5
d = {'a': 1, 'b': 2}
%store d # stores the variable
del d
%store -r d # Refresh the variable from IPython's database.
>>> d
{'a': 1, 'b': 2}
c.StoreMagic.autorestore = True
。c.HistoryManager.db_log_output
即可启用保存输出历史记录的功能。 - Ikke%history
命令很棒,但不幸的是它不能让你保存被 %paste 插入会话中的内容。要做到这一点,我认为你必须在开头执行 %logstart
(虽然我没有确认这是否有效)。
我喜欢做的事情是
%history -o -n -p -f filename.txt
这将保存输出、行号和每个输入前面的“>>>”符号(o、n 和 p 选项)。请参见 %history 文档 此处。
In[48]
)。因此,“save filename 1-48” 将保存你的整个会话。 - Ben Page%load my_useful_session
- Daniel Serodio