我试图用python中的untangle从一个子进程中解析一些xml。
out = subprocess.run(["./my_executable",options], stdout=PIPE, stderr=PIPE)
root = untangle.parse(out.stdout)
这给了我一个 TypeError
:
Traceback (most recent call last):
File "./script.py", line 64, in <module>
root = untangle.parse(out.stdout)
File "/home/user/.local/lib/python3.6/site-packages/untangle.py", line 182, in parse
parser.parse(StringIO(filename))
TypeError: initial_value must be str or None, not bytes
当我打印时 out.stdout
事实上,它确实按照预期给出了xml标签,但格式如下。
b'<root>\n <c1>value1</c1>\n <c2>value2</c2>\n</root>\n'
我试着去掉... \n
与 re.sub()
但我又得到另一个错误。TypeError: cannot use a string pattern on a bytes-like object
.
我想这可能是一个编码问题,而且这个 文件 会帮助我,但它似乎很有限。如何让untangle解析一个类似字节的对象?
先把类似字节的对象解码成一个字符串。
我使用的是 check_output
在这里提出一个异常,如果 my_executable
以一个非零的返回码结束。
out = subprocess.check_output(["./my_executable",options])
root = untangle.parse(out.decode("utf-8"))