Python Subprocess,如何将原始十六进制数据传递给命令行?

时间:2016-03-16 10:04:56

标签: python pipe subprocess

我有一个命令cat hash.bin | openssl pkeyutl -sign -inkey privk.pem可以正确获得结果。

现在我想用python subprocess来做,我这样做(从hash.bin读取hash

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,因为我的代码无法访问硬盘..

1 个答案:

答案 0 :(得分:1)

问题是由inkey命令后面的杂散空格字符引起的。

尝试删除空格,它应该有效:

cmd = ['openssl', 'pkeyutl', '-sign', '-inkey', prvk]

原因是Popen()作为-inkey选项令牌的一部分传递空格字符。 openssl决定没有名为-inkey的选项(带空格),因此退出。就像您从命令行执行此操作一样:

cat hash.bin | openssl pkeyutl -sign '-inkey ' privk.pem

失败了。