为何Python subprocess执行PTC Integrity命令的输出与CMD不同?
解决Python subprocess调用
im viewissue的编码解码问题 - 问题核心:CMD中显示正常是因为它使用系统OEM编码(而非你以为的UTF-8)解析命令输出,而Python用UTF-8或Windows-1252解码时编码不匹配,导致字符错误或解码失败。
- 0xb5字节在不同编码中的映射差异:
- OEM编码(如cp850)中0xb5对应
Á - Windows-1252中0xb5对应
µ
这就是你看到字符不符的原因。
- OEM编码(如cp850)中0xb5对应
解决步骤
确定CMD实际使用的编码
在CMD中执行chcp命令,查看返回的代码页编号(比如常见的850或437)。用对应编码解码subprocess输出
把解码编码换成CMD的OEM编码即可:import subprocess # 替换为你的itemID item_id = "<itemID>" # 替换为chcp返回的编码,比如cp850 cmd_encoding = "cp850" # 方式1:手动解码字节流 result = subprocess.run(["im", "viewissue", item_id], capture_output=True) output = result.stdout.decode(encoding=cmd_encoding) # 方式2:让subprocess直接处理编码 result = subprocess.run(["im", "viewissue", item_id], capture_output=True, encoding=cmd_encoding) output = result.stdout print(output)额外验证方法
如果不确定编码,可以先捕获原始字节,用errors='replace'临时处理,再对比CMD显示的字符,反向匹配编码:result = subprocess.run(["im", "viewissue", item_id], capture_output=True) # 先替换无法解码的字符,再观察对应位置的显示 temp_output = result.stdout.decode(encoding="utf-8", errors="replace") print(temp_output)
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

