gpt4 book ai didi

python - 子进程挂起等待

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:19 25 4
gpt4 key购买 nike

Popen.wait()的文档中,我看到了

Warning This will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that.

我在理解下面的行为时遇到了一些麻烦,因为下面运行的命令 会生成相当大量的标准输出。

不过,我注意到的是

subproc = subprocess.Popen(命令, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

会挂。

同时

subproc = subprocess.Popen(command, stdout=subprocess.PIPE)

不会挂起。

如果 command 生成大量标准输出,为什么第二条语句没有挂起,因为我们仍在使用 stdout=subprocess.PIPE

最佳答案

第二个命令不会挂起,因为问题不在于标准输出上的大量数据,而是标准错误上的大量数据。

在前一种情况下,标准错误被重定向到标准输出,标准输出通过管道传输到您的程序。因此,在标准错误上生成大量数据会产生与在标准输出上生成大量数据等效的结果。

在后一种情况下,子进程的标准错误被重定向到调用进程的标准错误,因此不会卡在管道中。

关于python - 子进程挂起等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37442986/

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