Перенаправление stderr в stdout в subprocess.check_output не выводит сообщение об ошибке. Почему? - PullRequest
0 голосов
/ 18 октября 2019

Я вызываю команду оболочки из модуля подпроцесса python, используя check_output.

Как показано ниже, я пытаюсь получить сообщение об ошибке выполнения неправильной команды оболочки lsl -l, перенаправив stderr в stdout. Но это не работает, по-видимому. Почему?

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

1 Ответ

0 голосов
/ 18 октября 2019

Вы должны попробовать использовать ; выход 0; после вашей команды. Документация для самого check_output гласит, что он вызывает CalledProcessError , если процесс завершается с ненулевым статусом. См. check_output для получения более подробной информации. Попробуйте следующую команду:

subprocess.check_output("lsl -l;exit 0;", shell=True,stderr=subprocess.STDOUT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...