Как выполнить 7zip команды из скрипта Python - PullRequest
3 голосов
/ 03 февраля 2012

Я пытаюсь получить общее представление о том, как можно использовать модуль os.system для выполнения команд 7zip. Пока я не хочу усложнять ситуацию с Popen или подпроцессом. Я установил 7zip и скопировал 7zip.exe в мою папку пользователя. Я просто хочу извлечь мой тестовый файл install.zip. Однако использование приведенного ниже кода приводит к тому, что оболочка ненадолго появляется перед выходом, и разархивирование не произошло. Пожалуйста, не могли бы вы сказать мне, почему?

def main():
    try:

         os.system(r"C:\Users\Oulton\ 7z e C:\Users\Oulton\install.zip")
    except:
            time.sleep(3)
            traceback.print_exc

if __name__ == "__main__":
    main()

Большое спасибо

Ответы [ 2 ]

7 голосов
/ 03 февраля 2012

Есть несколько проблем со следующей строкой:

os.system("C:\Users\Oulton\ 7z e C:\Users\Oulton\install.zip  ")

Поскольку ваша строка содержит обратную косую черту, вы должны использовать необработанную строку :

os.system(r"C:\Users\Oulton\7z -e C:\Users\Oulton\install.zip")

(обратите внимание на r перед первой двойной кавычкой.)

Я также удалил посторонние пробелы.Первый (до 7z) был определенно проблематичным.

Также обратите внимание, что traceback.print_exc не вызывает функцию.Вам необходимо добавить круглые скобки: traceback.print_exc().

Наконец, рекомендуется, чтобы в новом коде модуль subprocess использовался вместо предпочтения os.system().

1 голос
/ 21 июля 2017

Может быть сделано с использованием модуля подпроцесса:

import subprocess

beforezip = D:\kr\file                         #full location
afterzip = filename.zip
Unzipped_file = "7z a \"%s\" \"%s\"" %( afterzip, beforezip )
retV = subprocess.Popen(cmdExtractISO, shell=True, stdout=subprocess.PIPE, 
stderr=subprocess.STDOUT)
outData = retV.stdout.readlines();
...