Unix Popen.communicate无法gzip大文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unix Popen.communicate无法gzip大文件相关的知识,希望对你有一定的参考价值。

我需要在shell命令的基础上使用python gzip大小超过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)

它不是gzip输出目录中的文件。任何出路?

答案

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

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

另一答案

你试过这样的话:

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()

以上是关于Unix Popen.communicate无法gzip大文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用子进程 Popen.communicate() 方法?

了解 Popen.communicate

python popen.communicate() 与多个标准输入写入

当 Popen.communicate() 还不够?

为啥 Popen.communicate() 返回 b'hi\n' 而不是 'hi'?

Python Popen communicate 和wait使用上的区别