我正在学习this answer如何将Python命令历史记录写入文件,这依赖于 * readline * 模块和其中的 * write_history_file * 函数。我必须考虑在Windows 10上使用Conda提示符的差异,这只是带有Conda环境变量的CMD提示符。对于此用例,c:\User.Name中没有历史记录文件,这是通常的情况。另外,我需要pyreadline3。
下面是我如何在 * pyreadline3 * 中找到 * write_history_file * 的"模块路径":
from pprint import pprint
import inspect, pyreadline3
pprint(inspect.getmembers(pyreadline3.Readline))
<...snip...>
('write_history_file',
<function BaseReadline.write_history_file at 0x000001D67D83D280>)]^M^[[25l
<...snip...>
有一些令人费解的面向终端的控制字符,因为我使用Cygwin的Bash和typescript
来启动Conda(参见here),但“路径”显示为 * BaseReadline. write_history_file *。我从this answer得到了 * write_history_file * 的语法。下面是我如何使用它,结果是“AttributeError”:
>>> pyreadline3.BaseReadline.write_history_file('pyHistory')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\User.Name\.conda\envs\py39\lib\site-packages\pyreadline3\rlmain.p y",
line 180, in write_history_file
self.mode._history.write_history_file(filename)
AttributeError: 'str' object has no attribute 'mode'
即使我用双引号来装饰文件名pyHistory
,我也会得到相同的AttributeError。我在上面的AttributeError错误中唯一能找到的是this Q&A,但它似乎不适用,因为那里的答案是提供了错误的参数类型。
- 如何查找此错误的原因?**
对我来说,越简单越好。我试图访问一个实时的命令历史记录,因为它可以帮助我实验并开始使用Python(和Conda),来自一个Matlab,历史记录总是可用的。
1条答案
按热度按时间jexiocij1#
pyreadline3
和readline
是两个不同的模块。您从中复制的代码的答案是forreadline.write_history_file
,它接受一个字符串作为参数。您正在尝试调用
pyreadline3.BaseReadline.write_history_file
,这是一个不同的函数。实际上,它不是一个函数,而是一个方法。因此,当您尝试运行BaseReadline.write_history_file("...")
时,将字符串"..."
作为示例对象self
传递。这就是为什么会发生灾难性的爆炸。要正确使用该方法,您需要从创建
BaseReadline
(或者实际上是一个适当的子类,如Readline
)的示例开始。然后你可以在这个示例上调用这个方法: