我正在尝试在Python中实现以下bash命令提供的功能。
echo "$DATA" | gpg --symmetric --armor --batch --passphrase "${KEY}"
到目前为止,我尝试使用subprocess
,但在传递数据时遇到困难。我尝试在参数列表中将其作为命令发送给subprocess
,但这只是有效地回响了整个过程。
cmd = f"| gpg --symmetric --armor --batch --passphrase {key}".split()
temp = ["echo", f"\"{data}\""]
temp.extend(cmd)
res = subprocess.run(temp, stdout=subprocess.PIPE, universal_newlines=True)
encrypted = res.stdout.strip()
我也对使用python-gnupg模块感兴趣,但也没有想出如何用它复制上面的内容。
提前感谢您的帮助!
您可以在input
/ run()
中使用check_output()
参数:
from getpass import getpass
import subprocess
key = getpass("KEY: ")
data = b'Symmetric Encryption with GPG and Subprocess'
command = ["gpg", "--symmetric", "--armor", "--batch", "--passphrase", key]
out = subprocess.check_output(command, input=data, universal_newlines=False)
注意,默认情况下,GNU echo
将添加换行符。用echo -n
不打印结尾的\n
。无论哪种方式,您都需要谨慎地在Python中模仿它。
[如果有人想知道,我还获得了python-gnupg
模块,可用于我的应用程序。我坚持使用subprocess
答案,因为这样可以减少依赖关系,但也希望共享。
gpg = gnupg.GPG()
encrypted = str(gpg.encrypt(data, recipients=None, symmetric=True, passphrase=key, extra_args=["--batch"]))