将stderr重定向到subprocess.check_output中的stdout不会打印出错误消息。为什么?

问题描述 投票:0回答:1

我正在使用check_output从python的子进程模块中调用shell命令。

如下所示,通过将stderr重定向到stdout,我尝试获取执行错误的Shell命令lsl -l的错误消息。但这显然不起作用。为什么?

In [5]: subprocess.check_output("lsl -l", shell=True,stderr=subprocess.STDOUT)                                             
---------------------------------------------------------------------------
CalledProcessError                        Traceback (most recent call last)
<ipython-input-5-8dd15c76eb0f> in <module>
----> 1 subprocess.check_output("lsl -l", shell=True,stderr=subprocess.STDOUT)

/usr/lib/python3.5/subprocess.py in check_output(timeout, *popenargs, **kwargs)
    624 
    625     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
--> 626                **kwargs).stdout
    627 
    628 

/usr/lib/python3.5/subprocess.py in run(input, timeout, check, *popenargs, **kwargs)
    706         if check and retcode:
    707             raise CalledProcessError(retcode, process.args,
--> 708                                      output=stdout, stderr=stderr)
    709     return CompletedProcess(process.args, retcode, stdout, stderr)
    710 

CalledProcessError: Command 'lsl -l' returned non-zero exit status 127
python subprocess
1个回答
0
投票
; exit 0;。 check_output本身的文档说,如果进程以非零状态退出,则会引发

CalledProcessError。有关更多详细信息,请参见check_output。尝试以下命令:

subprocess.check_output("lsl -l;exit 0;", shell=True,stderr=subprocess.STDOUT)
© www.soinside.com 2019 - 2024. All rights reserved.