gpt4 book ai didi

Python,Popen 和 select - 等待进程终止或超时

转载 作者:IT老高 更新时间:2023-10-28 20:33:52 27 4
gpt4 key购买 nike

我使用以下方式运行子进程:

  p = subprocess.Popen("subprocess", 
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)

此子进程可以在 stderr 上出现错误时立即退出,或者继续运行。我想检测其中任何一种情况 - 后者需要等待几秒钟。

我试过了:

  SECONDS_TO_WAIT = 10
select.select([],
[p.stdout, p.stderr],
[p.stdout, p.stderr],
SECONDS_TO_WAIT)

但它只是返回:

  ([],[],[])

在任何一种情况下。我能做什么?

最佳答案

您是否尝试过使用 Popen.Poll() 方法。你可以这样做:

p = subprocess.Popen("subprocess", 
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE)

time.sleep(SECONDS_TO_WAIT)
retcode = p.poll()
if retcode is not None:
# process has terminated

这将导致您始终等待 10 秒,但如果失败案例很少见,这将在所有成功案例中摊销。


编辑:

怎么样:

t_nought = time.time()
seconds_passed = 0

while(p.poll() is not None and seconds_passed < 10):
seconds_passed = time.time() - t_nought

if seconds_passed >= 10:
#TIMED OUT

这有一个忙着等待的丑陋,但我认为它完成了你想要的。

另外再看一下选择调用文档,我想你可能想按如下方式进行更改:

SECONDS_TO_WAIT = 10
select.select([p.stderr],
[],
[p.stdout, p.stderr],
SECONDS_TO_WAIT)

由于您通常希望从 stderr 中读取数据,因此您想知道它何时有可读取的内容(即失败案例)。

我希望这会有所帮助。

关于Python,Popen 和 select - 等待进程终止或超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/337863/

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