你怎么看交互式python中的整个命令历史?

时间:2011-07-02 18:15:26

标签: python

我正在使用Mac OS X上的默认python解释器,而我是Cmd + K(已清除)我之前的命令。我可以使用箭头键逐个浏览它们。但是有一个选项,比如bash shell中的--history选项,它会显示你到目前为止输入的所有命令吗?

10 个答案:

答案 0 :(得分:196)

打印整个历史记录的代码(仅供将来参考):

python2

import readline
for i in range(readline.get_current_history_length()):
    print readline.get_history_item(i + 1)

python3

import readline
for i in range(readline.get_current_history_length()):
    print (readline.get_history_item(i + 1))

修改:注意get_history_item()的索引编号为1到n。

答案 1 :(得分:54)

答案 2 :(得分:30)

使用python 3解释器将历史记录写入
~/.python_history

答案 3 :(得分:4)

因为上面只适用于python 2.x. 对于python 3.x(特别是3.5)是类似的,但略有修改:

import readline
for i in range(readline.get_current_history_length()):
    print (readline.get_history_item(i + 1))

注意额外的()

(使用shell脚本解析.python_history或使用python修改上面的代码是个人品味和情况的问题)

答案 4 :(得分:2)

如果要将历史记录写入文件:

import readline
with open('pyhistory.txt', 'w') as f:
    for i in range(readline.get_current_history_length()):
        f.write(readline.get_history_item(i + 1) + "\n")

答案 5 :(得分:2)

一个简单的功能,可获取类似于unix / bash版本的历史记录。

希望它对一些新人有帮助。

def ipyhistory(lastn=None):
"""
param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
       Also takes -ve sequence for first n history records.
"""
import readline
assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
hlen = readline.get_current_history_length()

is_neg = lastn is not None and lastn < 0
if not is_neg:
    flen = len(str(hlen)) if not lastn else len(str(lastn))
    for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
        print(": ".join([str(r if not lastn else r + lastn - hlen ).rjust(flen), readline.get_history_item(r)]))
else:
    flen = len(str(-hlen))
    for r in range(1, -lastn + 1):
        print(": ".join([str(r).rjust(flen), readline.get_history_item(r)]))

代码段:已在Python3上测试。让我知道python2是否有故障。 样本:

  

完整历史记录:ipyhistory()

     

最近10条历史记录:ipyhistory(10)

     

前10个历史记录:ipyhistory(-10)

希望它可以帮助小伙子们。

答案 6 :(得分:2)

在IPython中,%history -g应该为您提供完整的命令历史记录。默认配置还会将您的历史记录保存到用户目录中名为.python_history的文件中。

答案 7 :(得分:1)

这应该为您提供单独打印的命令:

import readline
map(lambda p:print(readline.get_history_item(p)),
    map(lambda p:p, range(readline.get_current_history_length()))
)

答案 8 :(得分:0)

@Jason-V,真的很有帮助,谢谢。然后,我找到了this个例子并编写了自己的代码片段。

#!/usr/bin/env python3
import os, readline, atexit
python_history = os.path.join(os.environ['HOME'], '.python_history')
try:
  readline.read_history_file(python_history)
  readline.parse_and_bind("tab: complete")
  readline.set_history_length(5000)
  atexit.register(readline.write_history_file, python_history)
except IOError:
  pass
del os, python_history, readline, atexit 

答案 9 :(得分:0)

重排Doogle的答案,该答案不打印行号,但允许指定要打印的行数。

def history(lastn=None):
    """
    param: lastn Defaults to None i.e full history. If specified then returns lastn records from history.
           Also takes -ve sequence for first n history records.
    """
    import readline
    assert lastn is None or isinstance(lastn, int), "Only integers are allowed."
    hlen = readline.get_current_history_length()
    is_neg = lastn is not None and lastn < 0
    if not is_neg:
        for r in range(1,hlen+1) if not lastn else range(1, hlen+1)[-lastn:]:
            print(readline.get_history_item(r))
    else:
        for r in range(1, -lastn + 1):
            print(readline.get_history_item(r))