你好,我是Python的新手,正在尝试理解如何在subprocess check_output中使用stderr。我已经阅读了subprocess文档,但很难理解stderr的使用方式以及subprocess.STDOUT
实际完成的具体内容。
请问是否可以提供一些示例或参考资料来解释在此处如何使用stderr?
我已经尝试使用stderr和不使用stderr命令,并没有看到任何真正的区别。
代码:
#!/usr/bin/python3
import subprocess
print(subprocess.check_output("echo Hello World!",
stderr=subprocess.STDOUT,
shell=True))
输出:
# ./ex.py
b'Hello World!\n'
代码:
#!/usr/bin/python3
import subprocess
print(subprocess.check_output("gecho Hello World!",
stderr=subprocess.STDOUT,
shell=True))
输出:
# ./ex.py
Traceback (most recent call last):
File "./ex.py", line 6, in <module>
shell=True))
File "/usr/lib64/python3.3/subprocess.py", line 589, in check_output
raise CalledProcessError(retcode, process.args, output=output)
subprocess.CalledProcessError: Command 'gecho Hello World!' returned non-zero exit status 127
stderr=subprocess.STDOUT
都在将stderr重定向到stdout,它与捕获Python代码中的错误无关。 如果您没有将stderr重定向到stdour,那么任何来自stderr的内容都将被输出到屏幕上,而不会被check_output捕获。 当您想使用stderr = subprocess.STDOUT时,这就是一个示例http://stackoverflow.com/questions/39917569/why-doesnt-this-regex-work/39917623#39917623。 - Padraic Cunninghamstderr=subprocess.STDOUT
,一次不使用,你会很清楚地看到它们之间的区别。 - Padraic Cunningham