等待所有子进程在python中完成

时间:2014-10-12 15:44:42

标签: python subprocess

我有一个使用子进程执行命令的方法, 我想打电话给那个方法" n"没有时间等待所有" n"子进程完成 例如:

import subprocess
class mysubprocess():
    def child_process(self,directory):
        self.process=subprocess.Popen('ls',cwd=directory)

    def execute(self):
        directory=['/home/suresh/Documents','/home/suresh/Downloads']
        for i in directory:
            print(i)
            self.child_process(directory)

        self.process.wait()

def main():
    myobject=mysubprocess()
    myobject.execute()

if __name__=='main':
    main()

1 个答案:

答案 0 :(得分:1)

您需要存储对Popen个对象的引用,以便稍后调用它们wait methods。 (问题中的代码用最后一个Popen对象覆盖Popen对象,并仅等待最后一个子进程。)

import subprocess


class mysubprocess():

    def execute(self, directory_list):
        procs = []
        for d in directory:
            print(d)
            procs.append(subprocess.Popen('ls', cwd=d))  # <---
        for proc in procs:
            proc.wait()


def main():
    myobject = mysubprocess()
    myobject.execute(['/home/suresh/Documents','/home/suresh/Downloads'])


if __name__ == '__main__':
    main()

其他问题

  • 代码传递整个列表(directory)而不是项目。
  • 最后一次if语句应将__name__'__main__'进行比较。