Как создать zip-архив без ini и zip-файлов

#python #subprocess

#python #подпроцесс

Вопрос:

У меня есть папка, которая содержит :

 bd.txt
/Config
/DLL
/Rapports
bx1478.ini
ARCH.zip
  

Я хочу создать архив без ini и zip-файлов.
Я пытаюсь, как показано ниже, но получаю пустой архив :

 import subprocess
SZ_PATH_TMP = '../tmp'
SZ_PATH_WORK = '../work'
full_label_version = 'ARCH' 
subprocess.call(['7z', 'a', SZ_PATH_TMP '/' full_label_version '.zip', SZ_PATH_WORK '/* -xr!*.zip -xr!*.ini'])
  

Комментарии:

1. Вы используете относительные пути. Вы уверены, что они правильные и что вы запускаете свой скрипт Python из правильного местоположения. Попробуйте установить рабочий каталог для вызова подпроцесса в соответствующий каталог.

2. Да, относительные пути работают нормально, потому что, когда я удаляю -xr!*.zip -xr!*.ini, генерация работает, но со всеми файлами

Ответ №1:

Когда вы передаете список аргументов subprocess , каждый параметр должен быть отдельным элементом списка.

 import subprocess
SZ_PATH_TMP = '../tmp'
SZ_PATH_WORK = '../work'
full_label_version = 'ARCH' 
subprocess.call(
    ['7z', 'a', 
    SZ_PATH_TMP '/' full_label_version '.zip',
    SZ_PATH_WORK '/*,  '-xr!*.zip', '-xr!*.ini'])
  

Если вы не знаете точно, как оболочка разбивает командную строку на аргументы, возможно, передайте всю команду в виде строки в shlex.split()

Комментарии:

1. Если вы используете Windows, я не уверен, что shlex там работает правильно. (Возможно, «правильно» даже не определено в Windows.)