如果要与子进程进行 ,则必须担心死锁,即,如果要写入stdin以及从stdout读取数据。因为这些管道可能会被缓存,所以进行这种双向通信非常不行:
data_stream = Popen(mycmd, stdin=PIPE, stdout=PIPE)
data_stream.stdin.write("do something\n")
for line in data_stream:
... # BAD!
但是,如果在构造data_stream时未设置stdin(或stderr),则应该没问题。
data_stream = Popen(mycmd, stdout=PIPE)
for line in data_stream.stdout:
... # Fine
如果需要双向通信,请使用communication。