GPG не работает с python 3,8, но хорошо с 3,6 - PullRequest
0 голосов
/ 12 января 2020

Я только что начал баловаться с Python, и я застрял с моим первым проектом
Мне нужна помощь в попытках разобраться в gpg. Я пытался заставить gpg работать с python 3.8.1. Если запустить код в Thonny Python 3.6.9, просто запустите.

Версия gpg (GnuPG) 2.2.4 libgcrypt 1.8.1 Домашний каталог: /home/bob/.gnupg gnupg: / usr / local / lib / python3 .8 / site-packages / gnupg

с использованием Python 3.6.9 прекрасно работает

#!/usr/bin/python3

from pathlib import Path
import gnupg

# My gpg keys home directory.
#gpg = gnupg.GPG(homedir='/home/bob/.gnupg')
gpg = gnupg.GPG(gnupghome='/home/bob/.gnupg')

local_path = Path("/home/bob")
src_dir = ("/home/bob/Tbox/Channels2.csv")

with open(src_dir, 'rb') as afile:
   # text = afile.read()
    status = gpg.encrypt_file(afile,
        ['bobh@gunas.co.uk'],
        output='/home/bob/Tbox/Channels2.csv.gpg')

print('ok: ', status.ok)
print('status: ', status.status)
print('stderr: ', status.stderr)

SHELL OUTPUT
ok:  True
status:  encryption ok
stderr:  [GNUPG:] KEY_CONSIDERED 4678A2C439E752DA3DAE2EBA7357BB95381CD73 0
[GNUPG:] KEY_CONSIDERED 4678A2C439E752DA3DAE2EBA7357BB95381CD73 0
[GNUPG:] ENCRYPTION_COMPLIANCE_MODE 23
[GNUPG:] BEGIN_ENCRYPTION 2 9
[GNUPG:] END_ENCRYPTION

, однако, если я запускаю код в Thonny Python 3.8.1 Я не работаю с сообщением об ошибке в Shell

#!/usr/bin/python3

from pathlib import Path
import gnupg

# My gpg keys home directory.
gpg = gnupg.GPG(homedir='/home/bob/.gnupg')
#gpg = gnupg.GPG(gnupghome='/home/bob/.gnupg')

local_path = Path("/home/bob")
backup_dir = Path("/home/bob/Tbox/tbackup-test")
src_dir = ("/home/bob/Tbox/Channels2.csv")

with open(src_dir, 'rb') as afile:
     text = afile.read()
   # status = gpg.encrypt_file(text,
    status = gpg.encrypt(afile,
        ['bobh@gunas.co.uk'],
        output='/home/bob/Tbox/Channels2.csv.gpg')

print('ok: ', status.ok)
print('status: ', status.status)
print('stderr: ', status.stderr)

SHELL OUTPUT
ok:  False
status:  None
stderr:  gpg: Sorry, no terminal at all requested - can't get input

Я попытался добавить строку no-tty в файл gpg.conf, но это не помогло.

Я пытался с некоторым примером net, но с радостью, я обнаружил одну проблему, связанную с gpg и словом Context, например c = gpg.core.Context (armor = True) error AttributeError: 'GPG 'У объекта нет атрибута' core '.

1 Ответ

0 голосов
/ 12 января 2020

Во втором примере вместо:

status = gpg.encrypt(afile,

вам, вероятно, потребуется:

status = gpg.encrypt(text,

В основном вам нужно решить, шифровать ли файл, или содержимое файла (который вы читаете в переменной 'text'), и затем вы либо используете gpg.encrypt или gpg.encrypt_file соответственно.

...