Python 子进程,如何将原始十六进制数据传递到命令行?
Python Subprocess, how can I pass raw hex data to command line?
我有一个命令cat hash.bin | openssl pkeyutl -sign -inkey privk.pem
可以正确得到结果。
现在我想用 python subprocess
来做,我这样做(其中 hash
是从 hash.bin 读取的)
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey ', prvk]
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out = p.communicate(input=hash)[0]
print(out)
但是 openssl 失败了。
我无法使用 -in
和 -out
因为我的代码无法访问硬盘..
问题是由 inkey
命令后的 space 字符引起的。
尝试删除 space 应该可以:
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey', prvk]
原因是 Popen()
通过 space 字符作为 -inkey
选项标记的一部分。 openssl 决定不存在名为 -inkey
的选项(带有 space),因此它退出。就像您从命令行执行此操作一样:
cat hash.bin | openssl pkeyutl -sign '-inkey ' privk.pem
失败了。
我有一个命令cat hash.bin | openssl pkeyutl -sign -inkey privk.pem
可以正确得到结果。
现在我想用 python subprocess
来做,我这样做(其中 hash
是从 hash.bin 读取的)
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey ', prvk]
p = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out = p.communicate(input=hash)[0]
print(out)
但是 openssl 失败了。
我无法使用 -in
和 -out
因为我的代码无法访问硬盘..
问题是由 inkey
命令后的 space 字符引起的。
尝试删除 space 应该可以:
cmd = ['openssl', 'pkeyutl', '-sign', '-inkey', prvk]
原因是 Popen()
通过 space 字符作为 -inkey
选项标记的一部分。 openssl 决定不存在名为 -inkey
的选项(带有 space),因此它退出。就像您从命令行执行此操作一样:
cat hash.bin | openssl pkeyutl -sign '-inkey ' privk.pem
失败了。