python - 强制 Python 从命令行更新命令历史文件?
问题描述
Python
我通过从 Bash 命令行发出来使用没有 GUI/IDE 的 Python 。我在 Cygwin 环境中使用它,该环境在许多方面表现得像 Linux 系统。
用于 Python 命令行发出的命令历史记录的文件存储在~/.python_history
. 我可以使用 vim 的Buffer Explorer轻松搜索和拉取内容以进行操作。也很容易将操作过的内容拖入系统剪贴板,以便在 Python 命令行中粘贴。(另一方面,对于命令的更多战术性修改,我只是使用 readline 来 vim 以前的命令和单行的基础。)
我发现~/.python_history
在每个命令之后都不会更新。我不确定它多久更新一次,但很明显退出 Python 会导致它更新。使用 Ctrl+Z 进入后台不会。
(是否有从 Python 命令行强制更新到的快捷方便的方法~/.python_history
?
自从我最初发布这个问题以来,我有机会将 Linux (Ubuntu) 视为 VirtualBox 虚拟机。但是,启动整个客户机操作系统只是为了能够以调色板的形式访问命令历史记录,而不是使用向上箭头键一次一行(或者等效地,k
如果一个人的命令行编辑器是设置为 Vim)。我什至对 Bash 的“修复命令”(fc)命令的 Python 对应物感到满意,即使我必须删除所有我不想执行的行。
各种尝试
根据回复,我尝试 importing readline.write_history_file
,但它未被识别,即使它readline
本身是:
$python
Python 3.8.10 (default, May 20 2021, 11:41:59)
[GCC 10.2.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
# Show modules
>>> import sys
>>> modulenames = set(sys.modules) & set(globals())
>>> allmodules = [sys.modules[name] for name in modulenames]
>>> print(allmodules)
[<module 'sys' (built-in)>]
# Fail to import readline.write_history_file
>>> import readline.write_history_file as whf
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'readline.write_history_file'; 'readline' is not a package
# However, readline itself imports
>>> import readline
>>> readline.get_history_item(2)
'version'
readline
似乎确实是 Cygwin 存储库的一部分,所以我没有尝试pip install readline
:
搜索 Cygwin 包
readline
(然后浏览器搜索字符串python
)似乎最相关的一个结果
dll
显示文件名中带有、py
和pyc
files ,但我不确定模块本身readline[s]
采用的形式是什么意思。我欢迎对此进行澄清/解释。readline
事实上,我不愿意尝试在 Cygwin 包管理器之外安装任何东西,pip
因为担心会产生不一致。
解决方案
通读这个模块,我发现readline.write_history_file(path)
可能是您正在搜索的内容:
将历史列表保存到 readline 历史文件,覆盖任何现有文件。默认文件名是
~/.history
交互式解释器中的第一件事,执行
import readline.write_history_file as whf # write history file
然后您可以执行whf()
or whf("path/to/.historyfile")
,您的 python 历史记录会立即保存到磁盘。
编辑:
我不确定它多久更新一次
它仅在您退出解释器时更新。如果你杀死它,历史将不会被保存,Ctrl+Z
只会导致解释器被暂停。如果您随后取消暂停它(例如通过执行fg
or bg
)并正常退出它,历史文件将被写入。
推荐阅读
- c++ - 将数组传递给 C++ 中的函数并打印数组长度
- amazon-web-services - 极光 serverless 就算不使用也要花钱吗?
- makefile - 音频场景激活失败:1 [Makefile:68: run] 错误 1
- onesignal - OneSignal - 在线向特定用户发送通知 - 离线
- amazon-web-services - 抑制 AWS CDK 输出到标准输出
- laravel - 无法使用宅基地连接到数据库
- python - python / mysql:从多个表中选择覆盖结果字典中的重复列
- python - 打开一个文件,其名称存储在 python 的变量中
- javascript - 带有 ng-tempate 的 ngTemplateOutletContext 和带有角度错误变量的参考值的 for 循环不退出
- android - Chrome Android 上 createScriptProcessor 的奇怪行为