尝试通过子流程捕获输出时得到奇怪的结果

时间:2019-05-25 17:23:08

标签: python subprocess

使用操作系统: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


如您所见,这些奇怪的“ÿ”字符替换了一些空格。但是奇怪的是,并不是所有的空间。

是什么原因造成的?这是个问题吗?如何可靠地捕获输出?

1 个答案:

答案 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)