【发布时间】:2021-12-11 23:30:47
【问题描述】:
我知道可以使用 .poll() 检查子进程是否仍在运行。比如:
p = subprocess.Popen(...
"""
A None value indicates that the process hasn't terminated yet.
"""
poll = p.poll()
if poll is None:
# p.subprocess is alive
就我而言,我同时运行多个相同的子进程,并将它们存储在一个名为 proc 的列表中。每次我需要一个新的子流程时,我都会调用:
proc.append(subprocess.Popen([sys.executable,...
.poll() 不会获取列表值,所以有没有人可以为我提供一个工作示例,说明如何检查是否有任何子进程仍在运行,而子进程存储在列表中?
这是我目前的更新:
proc.append(subprocess.Popen([sys.executable,....
def evaluate():
global proc
global p
p = []
for t in proc:
print(t.poll())
if t.poll() is None:
p.append(0)
else:
p.append(1)
evaluate()
if 1 in p:
#some tasks running
else:
#no task running
【问题讨论】:
-
为什么不能遍历列表?
for process in proc: print(process.poll()) -
我将如何定义子进程是否仍在运行?因为定义它的变量每次都会在循环内被覆盖。
-
您将它们保存到一个列表中,以便将参考保存在那里,您是否尝试过这样做?
-
是的,我在过去的两个小时内尝试自己弄清楚。但是,我还没有成功。我在哪里可以发布更多代码,因为它似乎在此评论中不起作用?
-
为什么不使用内置的
any,带有生成器表达式,例如if any(t.poll() is None for t in proc): print('something is running')?
标签: python python-3.x subprocess popen sys