我如何在 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)
>>> 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)