我有一些使用子进程模块运行的命令。然后我想循环输出的行。文档说不要做 data_stream.stdout.read 我不是,但我可能正在做一些调用它的事情。我像这样循环输出:
for line in data_stream.stdout:
#do stuff here
.
.
.
这是否会导致死锁,例如从 data_stream.stdout 读取数据,或者是否为这种循环设置了 Popen 模块,以便它使用通信代码,但为您处理它的所有调用?
如果你是这样,你就必须担心死锁沟通与您的子进程一起,即如果您正在写入标准输入并从标准输出读取。因为这些管道可能会被缓存,所以进行这种双向通信是非常禁忌的:
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
如果您需要双向通信,请使用交流.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)