Python在Windows上的控制台输入历史记录存储在哪里?

6

下午好,

问题

对于 Windows 版本的 Python,这些输入条目是存储在特定位置还是仅仅是一组本地存储的变量?

背景信息

我想知道 Python.exe 存储从命令行中键入的条目的位置,而不是 Tkinter GUI。我特别感兴趣是因为我注意到如果你正在键入 raw_input(),你可以返回到以前的输入。关于 raw_input()input() 接收可编辑默认参数方面有许多讨论。

参见:这个相关的 Stack Overflow 问题链接

显然,使用 Linux/GNU 很容易实现这一点,并且可以利用 Bash 的格式。Windows 用户在这方面很不幸。

关于这些库的注释:

readline基于GNU,不能在Windows上正常工作。

pyreadline 对命令行解释器没有好处。

curses基于GNU,Windows上无法工作。

跟进问题

我的结论是,如果用户被给定预定义的输入条目,您可以限制输入到命令空间的内容。


P.S. - 我明白创建基于 PySide、Tkinter 或其他 GUI 会更容易解决我的问题。

Sir James


1
对于已经读取的内容,Windows控制台(conhost.exe)实现了命令行编辑、输入历史记录(例如F7历史记录框)和别名——为每个使用单独历史缓冲区的附加进程记住进程映像名称。历史缓冲区的数量在控制台属性中设置。此设置在注册表中持久化为默认设置(HKCU\Console)或由控制台标题命名的 - Eryk Sun
1
控制台输入历史记录可以使用未记录(不支持)的kernel32函数“GetConsoleCommandHistoryLengthW”和“GetConsoleCommandHistoryW”进行查询。或者只需运行“doskey.exe /history”,它会为您调用这些函数。 - Eryk Sun
1个回答

5
在 Windows 7 上,使用标准的 Python3.7 命令解释器(不是 IPython 或 IDLE),命令历史记录存储在文件 %USERPROFILE%\.python_history 中。Python2.7.x 不使用此位置,因为 Python 命令历史记录功能是从 Python 3.4 开始引入的。

1
你知道历史记录是如何被写入的吗?这是内置于解释器中的,还是有一个额外的模块来写入历史文件? - TheEagle
@程序员,这是通过readline完成的链接,如下所示:history = os.path.join(os.path.expanduser('~'),'.python_history')。不幸的是,这是一个很大的错误,因为他们硬编码了路径,因此无法在REPL中更改,除了讨论使用环境变量之外。此外,他们的内部和github文档没有更新,并显示错误的信息,即使用~/.history - not2qubit
我发现这在Python 3.9(Windows 10上的Anaconda)中不是这种情况,即在c:\Users\User.Name文件夹中没有任何名为history的文件,至少当从conda提示符中运行python命令时(这是我目前感兴趣的用例)。 - user2153235

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