我想获取tar.gz文件的未压缩文件大小,该文件的大小大于4GB。我发现一个shell命令可以执行相同的操作,并且shell命令可以正常工作。但是,当我在python程序中使用同一命令时,它永远不会完成。
我正在RHEL 6.8上运行脚本。
获得正确的未压缩文件大小的命令
gzip -dc some_tar_gz.tar.gz | wc -c
我的python脚本
import subprocess
import shlex
from pprint import pprint
command_list = shlex.split("gzip -dc some_tar_gz.tar.gz | wc -c")
result = subprocess.Popen(command_list, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = result.communicate()
pprint(out)
上面的gzip命令在5分钟内返回了未压缩的文件大小。但是,即使经过1小时,上述python脚本也没有返回任何结果。
编辑1:
[当我删除shell=True
并看到top
命令的结果时,该进程被自动终止后,python进程占用了大约27GB VIRT。我遇到了问题,但我不知道该如何解决。
如果有人有相同的问题,请使用工作代码
import subprocess
import shlex
from pprint import pprint
command_list_1 = shlex.split("gzip -dc some_tar_file.tar.gz")
command_list_2 = shlex.split("wc -c")
p1 = subprocess.Popen(command_list_1, stdout=subprocess.PIPE)
p2 = subprocess.Popen(command_list_2, stdin=p1.stdout, stdout=subprocess.PIPE)
p1.stdout.close()
output = p2.communicate()[0]
pprint(output.rstrip())