IPython:打印完整历史记录(不仅限于当前会话)

173
ipython中,我可以使用%hist%history打印最近的历史记录,但这仅打印当前会话的历史记录。
我想要打印所有历史记录,类似于bash history命令所做的那样。
我想要获取完整的历史记录,以便我可以使用正则表达式搜索,查看在指定命令后执行的命令等。
说到历史记录,它也可以打印时间戳吗? 注意:在bash中,我编写了一个简单的脚本,可以打印历史记录,并且可以使用grep关键字。 我可以看到某些命令执行的时间。 我可以指定-A n-B n,其中n是给定命令之后或之前的行数。 这非常方便,因为我可以轻松找到我何时做了什么,以及随后的操作......。
我正在寻找与ipython类似的东西。

9
IPython将其历史记录保存在~/.ipython/profile_default/目录下的一个history.sqlite文件中。在该文件中,您会找到以下表格:sessions(带有时间戳)、historyoutput_history - user3557327
3
@user3557327 - 我怎样可以在 ipython 中访问它? - user1968963
51
%history -g 可以显示所有历史命令。 -g 是用来搜索历史记录的,如果不指定匹配模式,就会返回全部历史记录。 - Thomas K
1
不是直接的。IPython 存储每个会话的开始和结束时间戳,但不是每个单独命令的时间戳。您可以编写一个围绕 HistoryAccessor API 的工具以不同的格式显示它。 - Thomas K
52
使用%history -g -f filename将其保存到文件中。 - Liso
显示剩余7条评论
3个回答

236

ipython 中输入:

%history -g

它不会打印时间码,但会打印会话/行号。


43

首先使用%hist -o -g -f ipython_history.md将历史记录(输入和输出)输出到文本文件中。(http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-history)

然后,您可以使用get_session_info函数检索您感兴趣的会话的日期和时间。(http://ipython.readthedocs.io/en/stable/api/generated/IPython.core.history.html?highlight=hist#IPython.core.history.HistoryAccessor.get_session_info)

profile_hist=IPython.core.history.HistoryAccessor(profile='default')
profile_hist.get_session_info(100)

这将打印出类似于以下内容:

(100, datetime.datetime(2018, 2, 13, 19, 8, 30, 40691), None, None, '')

这意味着会话100开始于2018年2月13日19:08:30。


2
这是Firefox扩展,@larssend发现的:SQLite Manager 它有一个GUI用于打开数据库文件并从菜单中发出各种sqlite命令。您还可以获得查看生成输出的SQL命令的额外奖励。以下是我在~/.ipython/profile_default/history.sqlite中使用ipython %history的截图:

enter image description here

甚至还有一个用于从数据生成图表(散点、线条、柱形等)的菜单!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接