通过Python中的子进程模块发出多线程“terraform init”可执行文件

2024-05-28 20:39:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中的一组子目录上执行terraform init命令时,我遇到了一个问题。terraform init子进程的输出显示了预期的结果,即terraform init可执行文件的标准输出,但是ThreadPoolExecutable在可执行文件将.terraform文件写入子目录之前返回为已完成。现在,我已经生成了一个变通方法,它只会持续执行相同的命令,直到文件出现为止,但是由于我想下一步执行多线程terraform apply --auto-approve,所以这个变通方法不起作用。这是底层可执行文件的问题还是应该使用另一个模块,如asynciomultiprocessing?非常感谢您的任何帮助

class InitializeDirectory():

    def __init__(self):
        self.base_path = Path(__file__).parent

    def init_dir(self, event):
        print(event)
        while len(os.listdir(event)) == 1:
            try:
                init: List[str] = ['terraform', 'init']
                os.chdir(event)
                result = subprocess.run(init, stdout=subprocess.PIPE, universal_newlines=True)
            except Exception as e:
                print(e)

def main(path):
    
    subdirs = gather_subdirectories(path)

    with ThreadPoolExecutor(max_workers=100) as executor:
        todo = []
        for _dir in subdirs:
            initializer = InitializeDirectory()
            future = executor.submit(initializer.init_dir, _dir)
            todo.append(future)
        results = []
        for future in as_completed(todo):
            res = future.result()
            results.append(res)
            print(len(results))

if __name__ == "__main__":
    main(subdir_path)

Tags: path命令selfevent可执行文件initmaindef

热门问题