如何检查是否不是一个而是任何 Popen 子进程仍然是 运行?
How to check if not one but any Popen subprocess at all is still running?
我知道可以检查子进程是否仍然是 运行.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
根据 Matiiss 的建议,您可以遍历列表或按索引访问列表中的项目,例如
>>> slp = []
>>> slp.append(subprocess.Popen(['sleep', '40']))
>>> slp.append(subprocess.Popen(['sleep', '40']))
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
0
或:
>>> for i in slp:
... i.poll()
参考您的评论:
>>> slp = []
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> if slp[1][0].poll() == 0:
... slp[1][1] = "Finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, None], [<subprocess.Popen object at 0x7f17b0bb0550>, None]]
>>> if slp[1][0].poll() == 0:
... slp[1][1] = "Finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, None], [<subprocess.Popen object at 0x7f17b0bb0550>, 'Finished']]
循环不同,因为循环拉出列表项,它本身就是一个列表[subprocess, variable]:
>>> slp = []
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> for i in slp:
... if i[0].poll() == 0:
... i[1] = "finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b0ba7ef0>, None], [<subprocess.Popen object at 0x7f17b0b64cf8>, None]]
>>> for i in slp:
... if i[0].poll() == 0:
... i[1] = "finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, 'finished'], [<subprocess.Popen object at 0x7f17b0bb0550>, 'finished']]
我知道可以检查子进程是否仍然是 运行.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
根据 Matiiss 的建议,您可以遍历列表或按索引访问列表中的项目,例如
>>> slp = []
>>> slp.append(subprocess.Popen(['sleep', '40']))
>>> slp.append(subprocess.Popen(['sleep', '40']))
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
>>> slp[1].poll()
0
或:
>>> for i in slp:
... i.poll()
参考您的评论:
>>> slp = []
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> if slp[1][0].poll() == 0:
... slp[1][1] = "Finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, None], [<subprocess.Popen object at 0x7f17b0bb0550>, None]]
>>> if slp[1][0].poll() == 0:
... slp[1][1] = "Finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, None], [<subprocess.Popen object at 0x7f17b0bb0550>, 'Finished']]
循环不同,因为循环拉出列表项,它本身就是一个列表[subprocess, variable]:
>>> slp = []
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> slp.append([subprocess.Popen(['sleep', '40']), None])
>>> for i in slp:
... if i[0].poll() == 0:
... i[1] = "finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b0ba7ef0>, None], [<subprocess.Popen object at 0x7f17b0b64cf8>, None]]
>>> for i in slp:
... if i[0].poll() == 0:
... i[1] = "finished"
...
>>> slp
[[<subprocess.Popen object at 0x7f17b1280a90>, 'finished'], [<subprocess.Popen object at 0x7f17b0bb0550>, 'finished']]