Форум сайта python.su
0
Здравствуйте!
Использую модуль subprocess, точнее его метод call для вызова через командную строку 7-zip архиватора с целью распаковки архивов в временную папочку, далее обрабатываю содержимое архива, содержимое временной папки удаляю, беру следующий архив, subprocess.call(…) и так по кругу (в цикле).
Возникла ситуация - один из архивов битый, в результате 7-zip выдал “Error: Can not open file as archive”, программа продолжила выполняться, и, ясное дело, вывалила ошибку, мол во временной папке нет данных. Как вы посоветуете отслеживать нормально ли распаковался архив, вернее не выдалось ли сообщение “Error: Can not open file as archive”? В каждом архиве по 2401 мелкому текстовому файлу. Очень важна производительность, поэтому не хотелось бы прибегать к предварительному тестированию каждого архива 7-zip'ом, просто…Что можно посоветовать?
Заранее спасибо.
Офлайн
857
для начала проверь, не возвращает ли 7-zip соответствующий код возврата
если тот есть, то его можно проверять
>>> ret = subprocess.call(['echo', 'x']) x >>> print(ret) 0 >>> ret = subprocess.call(['cat', 'x']) cat: x: Нет такого файла или каталога >>> print(ret) 1 >>>
Отредактировано py.user.next (Фев. 26, 2013 01:06:26)
Офлайн
221
kt368
в дополнение к сказанному: наверняка 7-zip пишет сообщения в stderr, можно считывать его, в случае если коды возврата не предусмотрены или по другой причине.
Офлайн
253
7z возвращает код ошибки
А в питоне естественно подойти так:
import subprocess as sp try: sp.check_call("7z x tmp.7z") print "done ок" except: print "fail" raise
Отредактировано doza_and (Фев. 26, 2013 19:51:35)
Офлайн
0
Все получилось! Проверяю код возврата и если он не равен нулю - архив битый. Спасибо!
Офлайн
-36
Если почитать документацию на прогу, то там будут описаны коды ошибки.
Офлайн