gpt4 book ai didi

Python 3 subprocess.PIPE 输出错误

转载 作者:行者123 更新时间:2023-11-28 22:06:11 25 4
gpt4 key购买 nike

我有一个简单的脚本,用于在测试中自动对我们的软件(Moab 工作负载管理器)进行 CLI 调用,以避免必须使用“--xml”标志来获取 xml 输出,然后通过 tidy 进行管道传输,所以它很容易阅读。它使用 subprocess.Popen 调用来运行命令,然后使用 str.strip()str.replace() 做一个小的清理返回的 xml,以便于目视检查。有问题的代码在这里:


cmdString = "%s --xml" % cmd
cmdList = cmdString.split()

cmdRun = subprocess.Popen(cmdList,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)

crOut,crErr = cmdRun.communicate()

xmlOutput = crOut.strip().replace("><",">\n<").replace("\" ","\"\n")


当我运行它时(我最近将我的 Python 升级到 Python 3.1.2)我现在收到以下错误:


Traceback (most recent call last):
File "/usr/local/bin/xmlcmd", line 50, in <module>
runXMLCmd(getCmd())
File "/usr/local/bin/xmlcmd", line 45, in runXMLCmd
xmlOutput = crOut.strip().replace("><",">\n<")
TypeError: expected an object with the buffer interface


看起来 communicate() 调用正在返回字节数组,但在 python 解释器中,如果我执行 dir(bytes) 我仍然可以看到 strip() 和 replace() 函数。有谁知道如何做到这一点?

谢谢。

最佳答案

bytes.replace() 期望字节作为参数:

crOut.strip().replace(b"><", b">\n<").replace(b"\" ", b"\"\n")

虽然一般来说,最好尽早将输入解码为 un​​icode 文本。以及要对文本(不是字节)执行的转换。

关于Python 3 subprocess.PIPE 输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4168809/

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