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

Lav*_*nya 129 python macos

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

Den*_*zov 218

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

python2

import readline
for i in range(readline.get_current_history_length()):
    print readline.get_history_item(i + 1)
Run Code Online (Sandbox Code Playgroud)

python3

import readline
for i in range(readline.get_current_history_length()):
    print (readline.get_history_item(i + 1))
Run Code Online (Sandbox Code Playgroud)

编辑:注释get_history_item()从1到n编制索引.

  • 一个班轮:`import readline; print'\n'.join([str(readline.get_history_item(i))for i in range(readline.get_current_history_length())])` (29认同)
  • 这个答案(以及它的非示例对应物)举例说明了例子对人们的重要性.谢谢. (20认同)
  • 凉!我在我的Python解释器启动脚本(由env.var` $ PYTHONSTARTUP`指向的脚本)中添加了一个`history()`函数.从现在开始,我可以在任何翻译会话中输入`history()`;-) (8认同)
  • 太棒了. (2认同)
  • 对于python 3.x,它的`print(readline.get_history_item(i + 1))` (2认同)
  • 每当我忘了如何做到这一点时,我都会来这里寻找答案,谢谢丹尼斯。 (2认同)
  • 我为这个知道什么时候的人加注了星标,我又回来了一次。 (2认同)

Ign*_*ams 59

使用readline.get_current_history_length()获得的长度,并readline.get_history_item()查看每个.

  • 请参阅@dennis Golomazov 的回答,以获得更好的答案。 (4认同)

小智 37

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

  • 不幸的是,使用虚拟环境时历史记录似乎没有更新:-/ (4认同)
  • 您需要`quit()`解释器,以便将当前会话历史记录包含在`〜/ .python_history`中。 (3认同)
  • 感谢您的回答。我后来发现这里的文档涵盖了这一点:https://docs.python.org/3/library/site.html#readline-configuration (2认同)

Mar*_*oma 12

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

import readline
readline.write_history_file('python_history.txt')
Run Code Online (Sandbox Code Playgroud)

帮助功能提供:

import readline
readline.write_history_file('python_history.txt')
Run Code Online (Sandbox Code Playgroud)


Yos*_*n42 10

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


dzN*_*NET 5

@Jason-V,这真的很有帮助,谢谢。然后,我找到了这个例子并组成了自己的片段。

#!/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 
Run Code Online (Sandbox Code Playgroud)


Doo*_*gle 5

一个简单的函数来获取类似于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)]))
Run Code Online (Sandbox Code Playgroud)

片段:使用 Python3 进行测试。如果 python2 有任何问题,请告诉我。样品:

完整历史:ipyhistory()

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

前 10 条历史:ipyhistory(-10)

希望对小伙伴们有帮助。


归档时间:

查看次数:

82550 次

最近记录:

6 年,10 月 前