【问题标题】:GPG not working with python 3.8 but ok with 3.6GPG 不适用于 python 3.8,但适用于 3.6
【发布时间】:2020-01-12 19:53:59
【问题描述】:

我刚刚开始涉足 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 文件中,但这没有帮助。

我尝试了一些网络示例,但很高兴,我发现的一个问题是与 gpg 和单词 Context (如 c = gpg.core.Context(armor=True) error AttributeError: 'GPG'对象没有“核心”属性。

【问题讨论】:

    标签: gnupg python-3.8


    【解决方案1】:

    在第二个例子中,而不是:

    status = gpg.encrypt(afile,
    

    你可能需要:

    status = gpg.encrypt(text,
    

    基本上你需要决定是加密文件还是文件的内容(你在变量'text'中读取),然后你要么使用@987654324 @ 或 gpg.encrypt_file 相应地。

    【讨论】:

    • 这不是问题,与 python 3.6.9 一样,我可以加密 tar、7zip、csv 和 txt 或任何我想要的文件。问题只是尝试将代码与 python 3.8.1 一起使用。我在网上找不到任何关于问题所在的信息。
    猜你喜欢
    • 2022-11-26
    • 2022-10-05
    • 2020-11-27
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2018-01-23
    相关资源
    最近更新 更多