Unix Popen.communicate无法gzip大文件

时间:2019-04-24 12:12:26

标签: python unix subprocess gzip popen

我需要在外壳程序命令顶部使用python压缩大于10 GB的文件,因此决定使用子进程Popen。

这是我的代码:

outputdir = '/mnt/json/output/'
inp_cmd='gzip -r ' + outputdir

pipe = Popen(["bash"], stdout =PIPE,stdin=PIPE,stderr=PIPE)
cmd = bytes(inp_cmd.encode('utf8'))
stdout_data,stderr_data = pipe.communicate(input=cmd)

它没有将输出目录中的文件压缩。 有办法吗?

2 个答案:

答案 0 :(得分:0)

最好的方法是使用subprocess.call()而不是subprocess.communicate()。

call()等到命令完全执行完,而在Popen()中,必须外部使用wait()方法来完成执行。

答案 1 :(得分:-1)

您是否尝试过这种方法?

output_dir = "/mnt/json/output/"

cmd = "gzip -r {}".format(output_dir)

proc = subprocess.Popen(
    cmd,
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    stdin=subprocess.PIPE,
    shell=True,
)

out, err = proc.communicate()