write_history_file("pyHistory"): 'str' 对象没有属性 'mode'

2024-02-02

我正在关注这个答案 https://stackoverflow.com/a/47595405/2153235将 Python 命令历史记录写入文件,该文件依赖于readline模块和写入历史文件其中的功能。我必须考虑在 Windows 10 上使用 Conda 提示符的差异,这只是为 Conda 设置了环境变量的 CMD 提示符。对于此用例,c:\User.Name 中没有历史文件,这是典型的情况。另外,我需要pyreadline3 https://stackoverflow.com/a/51964654/2153235.

这是我找到“模块路径”的方法写入历史文件 in pyreadline3:

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 https://stackoverflow.com/a/76520838/2153235),但“路径”显示为BaseReadline.write_history_file。我得到的语法是写入历史文件 from 这个答案 https://stackoverflow.com/a/47595405/2153235。这是我使用它的方式,导致“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'

即使我修饰文件名,我也会得到相同的 AttributeErrorpyHistory带双引号。我在上面的 AttributeError 错误中唯一能找到的是本次问答 https://stackoverflow.com/questions/54969871/attributeerror-str-object-has-no-attribute-mode但它似乎并不适用,因为答案是提供了错误类型的参数。

还有什么方法可以追踪此错误的原因?

对我来说,越简单越好。我正在尝试访问实时命令历史记录,因为它可以帮助我尝试并开始使用 Python(和 Conda),来自历史记录始终可用的 Matlab。


pyreadline3 and readline是两个不同的模块。您复制该代码的答案是为了readline.write_history_file https://github.com/pyreadline/pyreadline/blob/master/pyreadline/rlmain.py#L167,它接受单个字符串作为参数。

你正在尝试打电话pyreadline3.BaseReadline.write_history_file https://github.com/pyreadline/pyreadline/blob/master/pyreadline/rlmain.py#L167,这是一个不同的函数。事实上,它实际上不是一个函数,而是一个方法。所以当你尝试跑步时BaseReadline.write_history_file("..."),你正在传递字符串"..."作为实例对象self。这就是为什么它会发生灾难性的爆炸。

要正确使用该方法,您需要首先创建一个实例BaseReadline(或者实际上是一个适当的子类,例如Readline)。然后您可以在该实例上调用该方法:

r = pyreadline3.Readline()
r.write_history_file("./pyHistory.txt")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

write_history_file("pyHistory"): 'str' 对象没有属性 'mode' 的相关文章

随机推荐