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