python - 获取“OSError:无法运行 gpg () - 它可能不可用。” python-gnupg 出错
问题描述
我正在尝试制作一个简单的工具来解密 GPG 消息,但我在解密消息时不断收到错误消息,我不知道问题出在哪里。
这是代码:
import gnupg
import os
message = '''-----BEGIN PGP MESSAGE-----
Version: GnuPG v2
jA0ECQMCVady3RUyJw3X0kcBF+zdkfZOMhISoYBRwR3uk3vNv+TEg+rJnp4/yYIS
pEoI2S82cDiCNBIVAYWB8WKPtH2R2YSussKhpSJ4mFgqyOA01uwroA==
=KvJQ
-----END PGP MESSAGE-----
'''
passphrase = 'topsecret'
gpg = gnupg.GPG(os.popen("which gpg").read().strip())
decrypted_data = str(gnupg.decrypt(message, passphrase=passphrase))
print(decrypted_data)
这是错误:
PermissionError: [Errno 13] Permission denied: ''
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "test.py", line 29, in <module>
gpg = gnupg.GPG(os.popen("which gpg").read().strip())
File "/Users/***/PycharmProjects/untitled8/venv/lib/python3.6/site-packages/gnupg.py", line 849, in __init__
raise OSError(msg)
OSError: Unable to run gpg () - it may not be available.
解决方案
这些python-gnupg
软件包要求您安装gpg
可执行文件。
从部署要求文档中:
除了足够新的 Python 版本之外,为了使用这个模块,您需要访问兼容版本的 GnuPG 可执行文件。该系统已在 Windows 和 Ubuntu 上使用 GnuPG v1.4.9 进行了测试。在 Linux 平台上,这通常会通过您的发行版的包管理器安装(例如
apt-get
,在 Debian/Ubuntu 上)。此处提供 Windows 二进制文件- 使用gnupg-w32cli-1.4.x.exe
安装程序之一获得最简单的部署选项。
你得到的错误很清楚:
OSError: Unable to run gpg () - 它可能不可用。
它来自这一部分:
os.popen("which gpg").read().strip()
尝试which gpg
从终端/控制台运行。如果您没有gpg
安装,which gpg
将评估为空字符串''
,然后整行将评估为空''
字符串。它实际上与
gpg = gnupg.GPG('')
这将引发相同的错误,即找不到gpg
可执行文件。
所以,基本上,你需要先安装gpg
。
如果您已经gpg
安装并且由于某种原因which gpg
找不到它,您也可以传递一个gpgbinary
参数:
gpg = gnupg.GPG(gpgbinary="/usr/local/bin/gpg")
推荐阅读
- xamarin - 查找 Xamarin 类地址
- sql - 从日期中减去天数,然后将结果舍入到 Redshift 中的周末日期
- twilio - Twilio Flex 中未显示以编程方式创建的任务属性
- c - AVR:main()/ISR 干扰
- sql-server - 如何对链接服务器执行存储过程?
- python - 为什么这个非常简单的功能不起作用?
- sql - 选择所有唯一元组的 SQL 查询
- wordpress - 如何将元框添加到特定页面?
- python - 绘制多个 Pandas 数据框
- php - Spatie laravel-permissions Giving Error of Argument 1 Passed