小编use*_*204的帖子

gpg --passphrase-fd 不适用于 python 3 子进程

以下脚本encrypt_me.py从另一篇文章修改)使用 gpg 对其自身进行加密,并以装甲形式打印出密文。

但是它只适用于 python2.7 而不适用于 python3?你知道它在 python3 上运行时出了什么问题吗?

import subprocess
import shlex
import os
import sys

in_fd, out_fd = os.pipe()
passphrase = 'passsssphrase'
os.write(out_fd, passphrase.encode('utf-8'))
os.close(out_fd)
cmd = 'gpg --passphrase-fd {fd} -c --armor'.format(fd=in_fd)

with open(__file__,'r') as stdin_fh:
    proc=subprocess.Popen(shlex.split(cmd),
                          stdin=stdin_fh,
                          stdout=sys.stdout)
    proc.communicate()

os.close(in_fd)
Run Code Online (Sandbox Code Playgroud)

使用python2.7:

$ python encrypt_me.py
Reading passphrase from file descriptor 3    
-----BEGIN PGP MESSAGE-----
Version: GnuPG v1.4.12 (GNU/Linux)

jA0EAwMCXrbnOPX+CipgycBD3ErAKmba6UvtA35mjomOlbiOHX2M0bULbV+v8q8U
AJ+sTQcFZK+NoauMgUFm39/ZcNoI7W5u78x8dj5B1N6jLk11C7MgmkNmT5CiliQO
kl/el0fDAMnksrqGFpUC6+4ECOTJPpj0Z/Cn/3/62kLHkkbAxs+wyS8lGxXEIEKH
XFl3OLRlVmCbvtwzrNMFLiD/St6NHu3Wh9S2xt8fe0PAEAZoYlWWx8lnEQEKewq9
EzLlkLldZaDNja3ePzWZ8Z6AeDtowBa8kj+8x/HjxfKLGheBBNQuaeBdcSHgE/OW
esS/tEesQUlfUgqrZc2uBalLTV9xwyIpcV4cg8BubPWFCcBrDQ==
=iziW
-----END PGP MESSAGE-----
Run Code Online (Sandbox Code Playgroud)

使用 python3:

$ python3 encrypt_me.py
Reading …
Run Code Online (Sandbox Code Playgroud)

python subprocess gnupg

3
推荐指数
1
解决办法
1209
查看次数

标签 统计

gnupg ×1

python ×1

subprocess ×1