gue*_*tli 13 python subprocess
此时的输出subprocess.check_output()看起来像这样:
CalledProcessError: Command '['foo', ...]' returned non-zero exit status 1
Run Code Online (Sandbox Code Playgroud)
有没有办法得到更好的错误信息?
我想看到stdout和stderr.
重定向STDERR到STDOUT.
解释器的示例:
>>> try:
... subprocess.check_output(['ls','-j'], stderr=subprocess.STDOUT)
... except subprocess.CalledProcessError as e:
... print('error>', e.output, '<')
...
Run Code Online (Sandbox Code Playgroud)
将投掷:
error> b"ls: invalid option -- 'j'\nTry `ls --help' for more information.\n" <
Run Code Online (Sandbox Code Playgroud)
Explantion
来自check_output文档:
要同时捕获结果中的标准错误,请使用
stderr=subprocess.STDOUT
不要使用check_output(),使用Popen和Popen.communicate()代替:
>>> proc = subprocess.Popen(['cmd', '--optional-switch'])
>>> output, errors = proc.communicate()
Run Code Online (Sandbox Code Playgroud)
这output是来自的数据stdout和errors来自的数据stderr.
由于我不想编写更多代码,只是为了得到一个好的错误消息,所以我编写了subx
来自文档:
subprocess.check_output() 与 subx.call()
观察、比较、思考并决定哪些信息对您更有帮助。
subprocess.check_output()::
Run Code Online (Sandbox Code Playgroud)CalledProcessError: Command '['cat', 'some-file']' returned non-zero exit status 1子调用()::
Run Code Online (Sandbox Code Playgroud)SubprocessError: Command '['cat', 'some-file']' returned non-zero exit status 1: stdout='' stderr='cat: some-file: No such file or directory'...特别是如果代码在生产环境中失败,重现错误并不容易,subx 可以调用帮助您找出失败的根源。