【发布时间】:2014-01-01 03:14:00
【问题描述】:
我有以下代码
from __future__ import print_function
import subprocess
p = subprocess.Popen(['cat'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
p.kill()
p.wait()
print(p.stdin.write(b'some'))
我使用 python 2.7 和 python 3.3 运行它。使用 python 2.7 时,当我尝试写入标准输入时会引发异常。使用 python 3.3 此代码打印 4。python 2.7 子进程模块和 python 3.3 有什么区别?
【问题讨论】:
-
很高兴知道 Python 2.7 中抛出了哪个表达式 :-)
-
例外是
IOError: [Errno 32] Broken pipe。当我使用communicate时不会抛出异常,但我需要使用stdin.write。 -
你为什么要先杀死进程然后写入它的标准输入?对我来说,这似乎只是未定义的行为。
-
你真正想做什么?优雅地处理子进程死亡的情况?在哪个平台上?如果最后添加
p.stdin.flush(),3.3 会出现异常吗?
标签: python python-2.7 python-3.x subprocess python-3.3