我需要在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()