如何解决subprocess.Popen stdout 和 stderr 值不匹配
我正在尝试使用 Python3 subprocess
模块的 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?
解决方法
这种行为看起来很奇怪,文档明确说明
communicate() 返回一个元组(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)
运行上面的代码是否出现同样的不匹配?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。