Я использую эту функцию (на основе this awnser), чтобы сжать папку в зашифрованный файл .zip с использованием 7zip в подпроцессе:
def zipbkp(directoryToZip):
zipFileName = directoryToZip+".zip"
password = "minmin3"
appPath = "C:\Program Files\\7-Zip"
zApp = "7z.exe"
zAction = 'a'
zPass = '-p{0} -mhe'.format(password)
zAnswer = '-y'
zDir = directoryToZip
progDir = os.path.join(appPath,zApp)
print("[*] Trying to create .zip File, please wait...")
cmd = [zApp, zAction, zipFileName, zPass, zAnswer, zDir]
zipper = subprocess.Popen(cmd, executable=progDir, stderr=subprocess.STDOUT, stdout=subprocess.PIPE)
#Lacking Progressbar here
zipper.wait()
print("[*] Successfully created .zip File")
return zipFileName
Это прекрасно работает какявляется.Моя единственная проблема в том, что каталог zip довольно большой, я хочу предоставить информацию о ходе сжатия.
Я успешно установил и использовал tqdm , прежде чем отобразить индикатор выполнения, но могучтобы заставить его работать с этим подпроцессом 7zip.
Для справки, вот как я использовал tqdm в сценарии загрузки ftp:
with tqdm(unit = 'blocks', unit_scale = True, leave = False, miniters = 1, desc = 'Uploading', total = filesize) as tqdm_instance:
ftp.storbinary('STOR ' + filename, tmp, 2048, callback = lambda sent: tqdm_instance.update(len(sent)))
tqdm даже предоставляет пример использования конвейеровно я не очень понимаю это.В примере также используется grep, который недоступен в Windows.
Я также нашел этот пример , что еще хужечтобы понять.
Есть идеи, как получить и проанализировать информацию, предоставленную 7zip, используя tqdm?