我如何在 windows 上的 python 中测试子进程的标准输出、标准错误

how do i test subprocess's stdout, stderr in python on windows

>>> import subprocess
>>> f = open('txt', 'w+')
>>> p = subprocess.Popen(['dir'],stdout=f,stderr=f, shell=True)
>>> p.communicate()
(None, None) # stdout, stderr are empty. Same happens if I open a win32 gui app instead of python (don't think win32 gui apps set a stdout/stderr)

我想检索 subprocess 的标准输出或标准错误以测试它们的一些特征(不是当前的 sys.__stdout__)。我怎样才能从 python 解释器做到这一点?

我想你正在寻找 subprocess.PIPE

例子

>>> from subprocess import Popen, PIPE
>>> process = subprocess.Popen(['ls'], stdout = PIPE, stderr = PIPE, shell = True )
>>> process.communicate()
('file\nfile1\nfile2, '')

可以看出,

process.communicate()[0]

是命令的标准输出并且

process.communicate()[1] 

是标准错误

您可以使用 check_output 并捕获 CalledProcessError:

from subprocess import check_output, CalledProcessError

try:
    out = check_output(["dir"]) # windows  out = check_output(["cmd", "/c", "dir"])
except CalledProcessError as e:
    out = e.output

print(out)