Python子进程只提供1个输出而不是2

时间:2018-06-03 08:53:15

标签: python python-2.7 openssl subprocess

我想使用openssl和python子进程生成2个证书,key.pemcert.pem 并使用以下命令来执行此操作。

openssl req -newkey rsa:2048 -nodes -keyout key.pem -x509 -days 365 -out certificate.pem

这个命令在从termnial执行时工作得很好,但是当它在python子进程的帮助下从python脚本执行时它只能在所需的目录中输出key.pem文件而不是cert.pem文件。 下面是python脚本的代码片段:

    tempdirname = 'temp_cert/'
    keyname = 'key.pem'
    certname = 'cert.pem'

    expiration_period = '500'
    cmd = ['openssl', 'req', '-newkey', 'rsa:2048', '-nodes', '-keyout', tempdirname+keyname, '-x509', '-days', expiration_period, '-out', tempdirname+certname]
    p = subprocess.Popen(
        cmd,
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=False
    )
    out, err = p.communicate('\n')

我还希望cert.pem文件是同一个目录。我该怎么办? 我正在使用python 2.7

1 个答案:

答案 0 :(得分:0)

使用以下方法解决问题:

p = subprocess.Popen(
        cmd,
        stdin=subprocess.PIPE,
        shell=False
    )
#taking input like this
p.stdin.write("n")    
out, err = p.communicate('\n')

删除了以下行并开始工作:

stdout=subprocess.PIPE,
stderr=subprocess.PIPE,