gpt4 book ai didi

python - 如何在 python 中将 类型对象的输出重定向到文本文件?

转载 作者:行者123 更新时间:2023-12-01 08:05:27 25 4
gpt4 key购买 nike

我遇到了一个问题。我正在尝试将输出流重定向到文本文件,但出现的问题是我重定向的对象的类型为None。重定向到文件后,我能看到的唯一输出是

from contextlib import contextmanager


@contextmanager
def stdout_redirected(new_stdout):
save_stdout = sys.stdout
sys.stdout = new_stdout
try:
yield None
finally:
sys.stdout = save_stdout

with open('output3.txt', "w") as f:
with stdout_redirected(f):
XYZ = hid.core.show_hids(target_vid=vendor, target_pid=product)
print XYZ

如何重定向非类型对象的输出?

最佳答案

您无法重定向 None 类型对象的输出。此类对象没有任何输出。

您在代码中所做的任何事情都无法使这一行

XYZ = hid.core.show_hids(target_vid=des, target_pid=bes)

按照您想要的方式工作。这是因为您的代码将函数的返回值分配给 XYZshow_hids()返回值 None 。您可能认为这不是它应该如何工作的,但它实际上就是这样工作的。如果函数执行 return None ,或者(如本例所示)缺少 return语句,然后 None是您将要返回的内容,并且您无法在不重写函数的情况下更改它。

您可以看到输出,因此 show_hids()显然将该输出发送到控制台本身。如果你想让它去其他地方你必须得到 show_hids()将输出发送到您想要的位置。

评论中建议您查阅有关此主题的文档。请注意,仅由一两个人维护的小型第三方库的文档可能不如您想要的那么全面。这反过来意味着可能需要更多的工作来进行咨询。在这种情况下,您所需要做的就是转到 GitHub 上的项目页面并查看 examples folder ,其中包含名为 show_hids.py 的示例代码其中包含以下示例 Python 2 调用:

output = codecs.getwriter('mbcs')(sys.stdout)
hid.core.show_hids(output = output)

这非常清楚地表明您需要将打开的文件对象作为参数传递 output如果您希望输出到 sys.stdout 以外的某个地方,则添加到该函数.

但这可能只能让你到目前为止。某些 USB 设备的设备名称中包含 Unicode 字符,当我在 Python 2 下运行示例代码时,由于商标符号,它会因为名称 Natural® Ergonomic Keyboard 4000 而感到窒息。并摆弄codecs.getwriter()不会改变这一点,因为问题没有发生在输出阶段。

我已将其发布为 issue on GitHub但如果由我决定,我会标记它不会修复,因为这是一个纯粹的 Python 2 问题,并且对 Python 2 的支持将于今年结束。

因此,如果您遇到此问题,我建议您切换到 Python 3。自学 Python 2 是一个死胡同。

那么您需要做的就是:

with open(r"C:\Users\xxxxx\55561448.txt", "w", encoding="UTF-8") as f:
hid.core.show_hids(output=f)

当我在评论中建议您尝试重新分配sys.stdout时作为最后的手段,这就是我的意思:

default_stdout = sys.stdout
sys.stdout = open('help.txt', 'w')
hid.core.show_hids(target_vid=des, target_pid=bes)
sys.stdout = default_stdout

暂时的猴子补丁sys.stdout这样show_hids()会做你想做的事。但在这种情况下不需要这样做,因为 show_hids()它本身提供了一种将输出发送到您想要的位置的方法。

关于python - 如何在 python 中将 <None> 类型对象的输出重定向到文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55561448/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com