Python Subprocess等待子进程列表[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Subprocess等待子进程列表[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我正在使用python3子进程模块来处理bash脚本调用。我想在调用脚本时控制并发子进程的数量。

Popen.wait(timeout = None)等待子进程终止。设置并返回returncode属性。

我知道我可以调用subprocess.Popen.wait(timeout = None)来等待子进程终止。但我想知道我是否可以等待subprocess.Popen列表完成,有了它,我可以控制并发进程的数量。

示例代码段如下:

example.朋友

import subprocess
from itertools import zip_longest

seed = [1, 2, 4, 1, 3, 5, 4, 1]
basepath="/path/to/file/hello.sh"

def grouper(iterable, n, fillvalue=None):
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

def bash_handler(num):
    return subprocess.Popen('bash {0} {1}'.format(basepath, num), shell=True)

for bulk in grouper(seed, 2):
    [bash_handler(item).wait() for item in bulk if item is not None]
# This will executed one by one 

hello.是

# Validation goes here.
echo $1
sleep $1
echo "Finish Executed"
答案

当您使用communic()时,您不需要指定等待子进程退出。更多信息可以在这里找到https://docs.python.org/2/library/subprocess.html其他链接Understanding Popen.communicate

以下更改应该适合您

from subprocess import Popen,PIPE
def bash_handler(num):
    return subprocess.Popen('bash {0} {1}'.format(basepath, num), shell=True,stdout=PIPE)


for bulk in grouper(seed, 2):
    [bash_handler(item).communicate() for item in bulk if item is not None]

以上是关于Python Subprocess等待子进程列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python子进程模块subprocess详解

python 怎么启动一个外部命令程序,并且不阻塞当前进程

python子进程模块subprocess详解与应用实例 之二

Python子进程 - stderr在读取后擦除

等待进程直到所有子进程完成? [复制]

Python子进程通配符用法