使用操作系统:Microsoft Windows [版本6.1.7601](Windows 7)
使用python版本:3.7.2
我正在尝试使用子过程模块来运行一些命令,并获取它们的输出,以便我可以对其进行解析并基于其进行自动化。但是在测试捕获输出时,我遇到了一些奇怪的结果。
我运行了这段代码:
import subprocess;
command = subprocess.run(["dir"], shell=True, text=True, capture_output=True);
print(command.stdout);
并获得以下输出:
$ pytest.py
Volume in drive C has no label.
Volume Serial Number is [redacted]
Directory of C:\Users\[redacted]\tmp
25.05.2019 00:37 <DIR> .
25.05.2019 00:37 <DIR> ..
18.01.2017 15:25 16ÿ648 Install-WMF5.1.ps1
25.05.2019 18:47 142 pytest.py
13.01.2017 10:07 68ÿ054ÿ745 Win7AndW2K8R2-KB3191566-x64.msu
3 File(s) 68ÿ071ÿ535 bytes
2 Dir(s) 563ÿ220ÿ533ÿ248 bytes free
如您所见,这些奇怪的“ÿ”字符替换了一些空格。但是奇怪的是,并不是所有的空间。
是什么原因造成的?这是个问题吗?如何可靠地捕获输出?
答案 0 :(得分:0)
使用check_ouput
而非run
来启动带有cmd.exe
标志的/u
,以将结果编码为UTF-16。
然后decode
:
import subprocess
output = subprocess.check_output('cmd.exe /u /c "dir"').decode('utf-16')
print(output)