如何禁用 Python 3.4 中的新历史记录功能?

如何禁用 Python 3.4 中的新历史记录功能?

自从升级到 Python 3.4 以来,所有交互式命令都记录到~/.python_history.我不希望 Python 创建或写入此文件。

创建符号链接/dev/null不起作用,Python 会删除该文件并重新创建它。这文档建议删除sys.__interactivehook__,但这也会删除制表符完成功能。应该怎么做才能禁用写入此历史文件但仍保留制表符完成?

额外细节:

答案1

另一个 ~/.pythonrc 解决方案:

import readline
readline.write_history_file = lambda *args: None

答案2

从 Python 3.6 开始,您可以使用readline.set_auto_history禁用此功能:

import readline
readline.set_auto_history(False)

答案3

这对我有用。

创建~/.pythonrc文件:

import os
import atexit
import readline

readline_history_file = os.path.join(os.path.expanduser('~'), '.python_history')
try:
    readline.read_history_file(readline_history_file)
except IOError:
    pass

readline.set_history_length(0)
atexit.register(readline.write_history_file, readline_history_file)

然后导出:

export PYTHONSTARTUP=~/.pythonrc

答案4

我当前的解决方案(对于最近的 Python 3 版本)阻止默认使用 ~/.python_history 但保留将历史记录显式写入给定文件的可能性(使用 readline.write_history_file(filename) 或 readline.append_history_file(... )) 是在 PYTHONSTARTUP 文件中包含以下内容:

import readline
import time

readline.add_history("# " + time.asctime()) # prevent default use of ~/.python_history
readline.set_history_length(-1) # unlimited

它具有令人愉快的(对我来说)副作用,用解释器的启动时间标记任何明确写入的历史记录。它之所以有效,是因为修复了错误 5845可以看到这里

相关内容