gpt4 book ai didi

Python subprocess.Popen 和异步输出

转载 作者:太空狗 更新时间:2023-10-29 20:41:10 25 4
gpt4 key购买 nike

我有简单的 Python 脚本来在 Windows 和 Linux 下执行测试套件。每个测试都将其输出写入单独的文件。我使用 subprocess.Popen 类在一个循环中执行 shell 命令。

每个 shell 命令都是这样开始的:

def system_execute(self, command, path, out_file):
params_list = command.split(' ')
file_path = os.path.join(path, out_file)
f = open(file_path, "w")
subprocess.Popen(params_list, stdout=f)
f.close()

它工作正常,但是脚本在所有输出文件被写入之前完成了它的工作。实际上,我得到了数百个零大小的文件,完成写入输出和关闭句柄需要一些时间。谁能解释为什么它工作起来如此奇怪,是否有同步的方式来完成同样的工作?

谢谢

最佳答案

f.close() 之前,您必须为我们的子进程 wait()

def system_execute(self, command, path, out_file):
params_list = command.split(' ')
file_path = os.path.join(path, out_file)
f = open(file_path, "w")
sp = subprocess.Popen(params_list, stdout=f)
sp.wait()
f.close()

或者只是

def system_execute(self, command, path, out_file):
params_list = command.split(' ')
file_path = os.path.join(path, out_file)
f = open(file_path, "w")
subprocess.call(params_list, stdout=f)
f.close()

(或者,为了更容易处理文件,

[...]
with open(file_path, "w") as f:
subprocess.call(params_list, stdout=f)

关于Python subprocess.Popen 和异步输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7581951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com