提问人:Daniel 提问时间:10/11/2023 更新时间:10/12/2023 访问量:47
为什么 Python 的子进程输出与 PTC 命令的 cmd 输出不同?
Why is Python's subprocess output different than cmd's of a PTC command?
问:
我使用 Python 3.7 和 Integrity Client 12.5 的命令。当我在 cmd 中使用它进行查询和项目时,我得到了每个细节的完美解码,没有未知的字节或十六进制值。但是,当我尝试使用im viewissue <itemID>
subprocess.run(<command_args>, capture_output=True).stdout.decode(encoding='utf-8')
我收到此异常:
"UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 528: invalid start byte"
我尝试过的所有其他编码类型都存在问题。但是当我在 cmd 中使用完全相同的命令时,我没有看到任何有问题的字符,所有内容都正确显示,如果我检查正确,它也使用 UTF-8。
有一些编码可以显示该字符(例如 Windows-1252),但解码后的字符与应有的字符不同。Byte 0xb5 翻译为“μ”,但最初它应该是“Á”,因为它在 cmd 输出中。
我尝试使用不同的编码、不同的函数,但无法找到导致两个平台输出之间出现这种差异的原因,或者除了手动将字符映射到正确的字符之外,我该如何克服这个问题。
答:
0赞
Daniel
10/12/2023
#1
感谢所有在评论中提供帮助的人。
解决方案是找到 cmd 与 或 一起使用的代码页,然后将其用作 Python 脚本中的指定编码,例如chcp
mode
stdout.decode(encoding='cp852')
它是.cp852
评论