Я пытаюсь запустить процесс, и когда он закончится, прочитайте stderr и stdout. Я нашел единственный способ сделать это с помощью Python - создать подпроцесс.Popen с subprocess.PIPE в качестве аргументов stderr и stdout, а затем прочитать дескрипторы файлов Popen.stderr и Popen.stdout.
In [133]: subprocess.call(['python', '-c', "import sys; sys.exit(1)"])
Out[133]: 1
In [134]: p = subprocess.Popen(['python', '-c', "import sys; sys.exit(1)"])
In [135]: p.returncode
In [136]:
Я могу получить код возврата subprocess.call
, но не могу получить код возврата subprocess.Popen
. Я также попытался прочитать stderr, чтобы увидеть, действительно ли subprocess.Popen запускает команду:
In [143]: p = subprocess.Popen(['python', '-c', "import sys; sys.stderr.write('ook'); sys.exit(1)"], stderr=subprocess.PIPE)
In [144]: p.stderr.read()
Out[144]: 'ook'
In [145]: p.returncode
In [146]: p.kill()
In [147]: p.returncode
In [148]:
Таким образом, я могу прочитать stderr, что означает команду, которую я даю для подпроцесса. Открыт, но я не могу получить код возврата subprocess.Popen
. Есть идеи?