我正在尝试使用Python3subprocess
模块的Popen
命令来编写脚本。我正在尝试获得以下几个已安装软件的版本。
from subprocess import Popen, PIPE
nginx_version, err = Popen(["nginx", "-v"], stdout=PIPE, stderr=PIPE).communicate()
print("Nginx Version:" + nginx_version.decode("utf-8"))
print("Stderr:" + err.decode("utf-8"))
###################OUTPUT####################
Nginx Version:
Stderr: nginx version: nginx/1.16.1
有没有办法以标准方式转换和处理STDOUT和STDERR?
这种行为看起来很奇怪,文档明确地声明
communication((返回一个元组(stdout_data,stderr_data(。如果流以文本模式打开,则数据将是字符串;否则为字节。
我将按照以下方式设置它,注意使用text=True
以避免对字节输出进行解码。
from subprocess import Popen, PIPE
def get_version(name):
proc = Popen([name, "--version"], stdout=PIPE, stderr=PIPE, text=True)
program_version, stderr = proc.communicate()
exitcode = proc.returncode
return program_version.strip(), stderr.strip(), exitcode
nginx_version, stderr, exit_code = get_version("nginx")
if exit_code == 0:
print("Nginx Version: " + nginx_version)
else:
print("Stderr: " + stderr)
运行上面的代码时是否会发生同样的不匹配?