python write_history_file(“pyHistory”):“str”对象没有属性“mode”

c0vxltue  于 2023-06-28  发布在  Python
关注(0)|答案(1)|浏览(142)

我正在学习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,历史记录总是可用的。

jexiocij

jexiocij1#

pyreadline3readline是两个不同的模块。您从中复制的代码的答案是for readline.write_history_file,它接受一个字符串作为参数。
您正在尝试调用pyreadline3.BaseReadline.write_history_file,这是一个不同的函数。实际上,它不是一个函数,而是一个方法。因此,当您尝试运行BaseReadline.write_history_file("...")时,将字符串"..."作为示例对象self传递。这就是为什么会发生灾难性的爆炸。
要正确使用该方法,您需要从创建BaseReadline(或者实际上是一个适当的子类,如Readline)的示例开始。然后你可以在这个示例上调用这个方法:

r = pyreadline3.Readline()
r.write_history_file("./pyHistory.txt")

相关问题