Почему вывод оболочки идет в stderr? - PullRequest
1 голос
/ 14 апреля 2019

Я использую модуль subprocess из python и всякий раз, когда я вызываю какой-либо из методов, которые должен запускать подпроцесс, в данном случае некоторый код bash на оболочке выводит (скажем, из команды, например, iwconfig ) перенаправляется на stderr .

Разве вывод этой команды не должен перенаправляться на stdout вместо stderr ? Как я уже сказал, это происходит с любым методом, таким как .Popen() и .check_output(). Этот вопрос может показаться дублированным, но я не вижу других ответов на форуме, объясняющих концепцию, почему это происходит.

Параметр stderr установлен на subprocess.STDOUT, поэтому я могу получить вывод команды. Иначе другого пути нет. В любом случае, stderr , куда идут ошибки вывода, верно? Это не имеет смысла для меня ...

s = subprocess.check_output("iwconfig", shell=True, universal_newlines=True, stderr=subprocess.STDOUT)

Заранее спасибо.

1 Ответ

0 голосов
/ 15 апреля 2019

Как сказал @JohnAnderson, это происходит потому, что, если в моей системе не настроено беспроводное устройство, вывод iwconfig будет рассматриваться как сообщение об ошибке, даже если вывод казался нормальным. Я также нашел другой новый метод из подпроцесса , называемый run (), и то же самое происходит, так что, безусловно, это поведение Unix / Linux.

s = subprocess.run('iwconfig', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

s.stderr #Produces output
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...