Python子进程。打开奇怪的行为

我试图运行一个进程,当它完成时,阅读stderr和stdout。 我发现只有这样做的方法是使用Python创建一个subprocess.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]: 

所以,我可以读标准错误,这意味着命令我给subprocess.Popen正在运行,但我不能得到的返回码subprocess.Popen 。 有任何想法吗?


您必须wait命令完成。

>>> p.wait()
1
>>> p.returncode
1

或使用communicate

>>> stdout, stderr = p.communicate()
>>> stdout
>>> stderr
'ook'
>>> p.returncode
1

尝试这个:

In [39]: p = subprocess.Popen(['python', '-c', "import sys; sys.exit(1)"])

In [40]: p.poll()
Out[40]: 1

if (subprocess.call(command, shell=True) != 0):
    # wait and return returncode attribute
    # non-zero returncode indicates failure
    pass 
链接地址: http://www.djcxy.com/p/77135.html

上一篇: Python subprocess.Popen strange behavior

下一篇: python subprocess Popen environment PATH?