Функциональность для выполнения того, что вы хотите, не существует в оригинальном python-gnupg .
Здесь есть измененная версия здесь от isislovecruft (чтовы получите, если вы pip install gnupg
), который добавляет поддержку --list-packets
с gpg.listpackets
, но все еще не поддерживает --use-embeded-file-name
Так что мой подход, если бы я настаивал на использовании только Python, вероятно,Начнем с версии isislovecruft, а затем подкласс GPG следующим образом:
import gnupg
import os
GPGBINARY = os.environ.get('GPGBINARY', 'gpg')
hd = os.path.join(os.getcwd(), 'keys')
class myGPG(gnupg.GPG):
def decrypt_file_original_name(self, file, always_trust=False, passphrase=None, extra_args=None):
args = ["--use-embedded-filename"]
output = calculate_the_file_name_using_list_packets()
self.set_output_without_confirmation(args, output)
if always_trust: # pragma: no cover
args.append("--always-trust")
if extra_args:
args.extend(extra_args)
result = self.result_map['crypt'](self)
self._handle_io(args, file, result, passphrase, binary=True)
# logger.debug('decrypt result: %r', result.data)
return result
gpg = myGPG(gnupghome=hd, gpgbinary=GPGBINARY)
Имейте в виду, что на данный момент почти наверняка намного проще просто использовать подпроцесс и запускайте бинарный файл gpg непосредственно из оболочки, особенно если вам не важны выходные данные.
В любом случае, я дошел до этого и сейчас не хватило времени, поэтому я оставляю реализацию calculate_the_file_name_using_list_packets
до вас, если вы решите пойти по пути «чистого питона».Надеюсь, теперь у вас немного проще gpg.list-packets
.Удачи!