我从一个windows命令行调用中读取输出如下:
result = subprocess.run(["cmd", "/c", "dir","c:\mypath"], stdout=subprocess.PIPE, text=True,check=True)
字符串
结果可能包含意外的字符,我得到一个UnicodeDecodeError。它试图用text = result.stdout.encode('ascii','replace').decode('ascii')
清理它,但这并不总是有帮助。
我如何稳健地阅读文本,避免任何UnicodeDecodeError?
1条答案
按热度按时间jmp7cifd1#
如果不能依靠子过程生成有效的文本,就不要使用
text=True
;但是当需要解码值时,就有责任尝试找出编码。字符串
如果你能预测预期的编码,你也可以说
型
从外观上看,您是在Windows上;可能会检查您当前的系统编码(CMD窗口中
chcp
的输出是什么?)并进行相应的调整。(还请注意,对于任何带有文字反斜杠的字符串值,都使用原始字符串。)
当然,如果只是获取一个目录列表,可能更喜欢
os.scandir()
或它的pathlib
等价物。