subprocess.Popen () обработка stdout и stderr - PullRequest
0 голосов
/ 23 октября 2018

Как я могу обработать процесс stderr?

proc = subprocess.Popen('ll'.split(), stdout=subprocess.PIPE)

for i in proc.stdout:
   print(i)

В данный момент я транслирую вывод, но я не уверен, как правильно бороться с потенциальной ошибкой, которая может произойти.

Я хотел использовать out, err = proc.communicate(), но мой out мог бы быть очень очень очень длинной строкой

1 Ответ

0 голосов
/ 23 октября 2018

Если вы знаете, какие сообщения об ошибках ожидать, тогда один ответ должен передать subprocess.STDOUT аргументу stderr Popen, чтобы ваши сообщения stderr были в потоке stdout:

proc = subprocess.Popen('ll'.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

for i in proc.stdout:
   print(i)
   # check for error message strings and do something with them

Или, если вам не нужны сообщения stdout, просто переберите stderr:

dnull = open(os.devnull, 'w')
proc = subprocess.Popen('ll'.split(), stdout=dnull, stderr=subprocess.PIPE)

for i in proc.stderr:
   print(i)
   # check for error message strings and do something with them
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...