gpt4 book ai didi

python子进程模块: looping over stdout of child process

转载 作者:太空狗 更新时间:2023-10-30 00:27:12 25 4
gpt4 key购买 nike

我有一些使用子进程模块运行的命令。然后我想遍历输出的行。文档说不要做 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

如果需要双向通信,使用communicate .

关于python子进程模块: looping over stdout of child process,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277866/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com