#python
#python
Вопрос:
Я пробую небольшую программу на Python для шифрования и дешифрования zip-файла с использованием 7 zip, и вот сценарий:
import zipfile
import os
import subprocess
os.environ['ZIP_ENCRYPT_PASS'] = 'test'
password = os.environ['ZIP_ENCRYPT_PASS']
# Step 1: Encrypt the file using AES256
rc = subprocess.call(['7z', 'a', '-mem=AES256', password, '-y', 'myarchive.zip']
['/Users/joe/Projects/Sandbox/python-projects/test.txt', '/Users/joe/Projects/Sandbox/python-projects/some.txt'])
# Step 2: Decrypt the archive
f = zipfile.ZipFile('myarchive.zip').extractall(pwd=password)
Когда я попытался запустить этот скрипт, я получаю сообщение об ошибке, как показано ниже:
Joes-MacBook-Pro:python-projects joe$ python ./test.py
Traceback (most recent call last):
File "./test.py", line 10, in <module>
['/Users/joe/Projects/Sandbox/python-projects/test.txt', '/Users/joe/Projects/Sandbox/python-projects/some.txt'])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Я попытался запустить этот скрипт как:
python test.py
python ./test.py
Оба подхода привели меня к одному и тому же сообщению об ошибке! Оба файла, которые я пытаюсь заархивировать, существуют, и я даже предоставил полные разрешения для этих файлов!
Есть ли что-нибудь, чего мне не хватает, и как избавиться от этой досадной ошибки?
Комментарии:
1. Не могли бы вы попробовать указать abspath
7z
для подпроцессаcall
?/usr/bin/7z
?2. Как я могу добавить это в качестве зависимости в Python?
3. Как вы можете добавить
what
в качествеdependency
?4. Я не хочу использовать 7z из базовой ОС, скорее я хочу это как библиотеку, которую я могу запускать где угодно!
5. Если программа не установлена по умолчанию
PATH
, она не сможет ее найти