gpt4 book ai didi

python - subprocess.Popen() - p.stdout.read() 和 p.wait() 的顺序重要吗?

转载 作者:行者123 更新时间:2023-11-28 23:01:11 26 4
gpt4 key购买 nike

关于Python的subprocess.Popen()对象的问题
(请假设这样一种情况,其中为 stdout/stderr 生成的字节数没有填满 OS 管道缓冲区并创建等待 OS 管道缓冲区接受更多数据的死锁)

1) p.stdout.read() 和 p.wait() 的顺序重要吗?

2) stdout/stderr subprocess.PIPE 上的 read() 是否会阻塞直到进程终止?

3) 即使在进程终止后,stdout/stderr subprocess.PIPE 文件对象和数据是否可用?

import subprocess
process = subprocess.Popen(args="ls", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
stdout = process.stdout.read()
# Does the above read() block until the process has terminated?
stderr = process.stderr.read()
return_code = process.wait()

process = subprocess.Popen(args="ls", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
return_code = process.wait()
# Are stdout and stderr pipes available now, even after the process terminated?
stdout = process.stdout.read()
stderr = process.stderr.read()

最佳答案

问:p.stdout.read() 和 p.wait() 的顺序重要吗?
答:没有。

问:stdout/stderr subprocess.PIPE 上的 read() 是否会阻塞直到进程终止?
A:如果没有指定要读取的字节数限制,那么它将阻塞直到流关闭(这很可能在进程终止时)。

问:即使在进程终止后,stdout/stderr subprocess.PIPE 文件对象和数据是否可用?
答:是的。

您可能需要特别注意 subprocess 文档中的警告:

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.

关于python - subprocess.Popen() - p.stdout.read() 和 p.wait() 的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11286594/

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