Python subprocess.Popen和异步输出

时间:2011-09-28 10:41:03

标签: python asynchronous subprocess

我有简单的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()

它工作正常,但脚本在>所有输出文件都已写入之前完成其工作。 实际上,我获得了数百个零大小的文件,并且完成编写输出和关闭句柄需要一些时间。 任何人都可以解释为什么它的工作如此奇怪,是否有同步方式来做同样的工作?

由于

1 个答案:

答案 0 :(得分:17)

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)