我是python的新手,对不起,如果我遗漏了一些“显而易见的”。
目前我正在编写一个脚本来为DNSSEC生成TLSA记录。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from subprocess import Popen, PIPE
def makeTLSA():
der_cert_proc = Popen(['openssl', 'x509','-in','/etc/letsencrypt/live/example.com/cert.pem','-outform','DER'], stdout=PIPE, stderr=PIPE)
der_cert_output = der_cert_proc.communicate()[0].strip()
return der_cert_output
print makeTLSA()
目前只打印出DER格式的证书。但输出与调用
不同 openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -outform DER
但如果我将其改为
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from subprocess import Popen, PIPE
def makeTLSA():
der_cert_proc = Popen(['openssl', 'x509','-in','/etc/letsencrypt/live/example.com/cert.pem'], stdout=PIPE, stderr=PIPE)
der_cert_output = der_cert_proc.communicate()[0].strip()
return der_cert_output
print makeTLSA()
输出与
相同 openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem
Python在Centos 7上是2.7.5。
答案 0 :(得分:-1)
根据https://docs.python.org/2/library/subprocess.html#popen-objects
communicate()
返回带有stdout和stderr的tuble,也许该命令将部分响应写入stderr。
您可以使用
进行检查der_cert_output = (der_cert_proc.communicate()[0].strip() +
der_cert_proc.communicate()[1].strip())
或者通过在命令行上删除stderr: openssl .... 2>的/ dev / null的