Я хочу получить размер несжатого файла tar.gz, размер которого превышает 4 ГБ. Я нашел команду оболочки, чтобы сделать то же самое, и команда оболочки работает отлично. Но когда я использую ту же команду в моей программе на Python, она никогда не завершается.
Я запускаю скрипт на RHEL 6.8.
Команда для получения правильного размера несжатого файла
gzip -dc some_tar_gz.tar.gz | wc -c
Мой скрипт на питоне
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 минут.
Но приведенный выше скрипт на python не дал никакого результата даже через 1 час.
Редактировать 1:
Когда я удалил shell=True
и увидел результат команды top
, процесс python брал около 27 ГБ VIRT, после этого процесс был автоматически убит. У меня проблема, но я не знаю, как ее решить.
Редактировать 2:
Рабочий код
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())