如何解决os.popen:如何整合文件的输出和数据?
我有一个基本脚本,该脚本读取一个文件,该文件具有程序包名称以构建命令字符串,并存储在变量中。
然后,我调用os.popen
来运行命令并将输出存储到变量中以进行进一步处理。
我遍历该变量以查找“错误:”字符串,如果有匹配项,则将其打印出来。一切正常,但是它只是打印出我想要的错误,但是即使我包含package变量,我也想知道是哪个包导致了错误。
以下是文件的内容:
kernel-3.10.0-1160.el7
openshift-clients-4.3.7-202003130552.git.0.6027a27.el7
NetworkManager-config-server-1.18.8-1.el7
python2-psutil-5.6.6-1.el7ar
systemd-219-67.el7_7.1.x86_64
这是脚本:
import os
import sys
f=open("data1","r")
for pkg in f:
#print(pkg)
command='yum --showduplicates list + ' +pkg
with os.popen(command) as results_in:
for item in results_in:
if 'Error:' in item:
print(item + "package name:" + pkg)
这是脚本的结果:
Error: No matching Packages to list
我希望得到错误+软件包名称。
有人可以告诉我我需要做些什么来进行适当的调整吗?
解决方法
temp[this->size]
正在将错误消息写入yum
,而不是stderr
。您看到的是stdout
打印的错误消息,而不是脚本中的消息。
您需要将yum
重定向到stderr
,以便捕获并检查它。
从文件中读取的行中删除尾随换行符也是个好主意,stdout
pkg = pkg.strip()
,
我用另一种获取所需数据的方式编写了脚本。感谢您的帮助!您激发了stderr的想法,所以我采用了该方法来捕获它并在此基础上做出响应。
import subprocess
import shlex
f=open("data1","r")
for pkg in f:
command='yum list available ' + pkg
proc = subprocess.Popen(shlex.split(command),stdout=subprocess.PIPE,stderr=subprocess.PIPE)
output = proc.stdout.readline()
stdout,stderr= proc.communicate()
if 'Error' in str(stderr,'utf-8').strip():
print("Error not available: "+pkg)
else:
print("Package available: "+pkg)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。