os.popen: 如何整合文件的输出和数据?
os.popen: How to integrate output and data from file?
我有一个基本脚本,它读取一个包含包名称的文件来构建一个命令字符串,并将其存储在一个变量中。
然后我调用 os.popen
到 运行 命令并将输出存储到变量以供进一步处理。
我循环遍历变量以查找 'Error:' 字符串,如果有匹配项,则将其打印出来。一切正常,但它只是打印出我想要的错误,但我也想知道是哪个包导致了错误,即使我包含了包变量,我也只会得到错误。
文件内容如下:
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
我希望得到错误+包名。
有人可以告诉我需要做什么才能进行适当的调整吗?
yum
正在将错误消息写入 stderr
,而不是 stdout
。您看到的是 yum
打印的错误消息,而不是您的脚本。
您需要将 stderr
重定向到 stdout
以便捕获并检查它。
从文件中读取的行中删除尾随换行符也是一个好主意,pkg = pkg.strip()
command=f'yum --showduplicates list ' + pkg + ' 2>&1'
我用另一种方式编写了脚本来获取我正在寻找的数据。谢谢您的帮助!你激发了 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)
我有一个基本脚本,它读取一个包含包名称的文件来构建一个命令字符串,并将其存储在一个变量中。
然后我调用 os.popen
到 运行 命令并将输出存储到变量以供进一步处理。
我循环遍历变量以查找 'Error:' 字符串,如果有匹配项,则将其打印出来。一切正常,但它只是打印出我想要的错误,但我也想知道是哪个包导致了错误,即使我包含了包变量,我也只会得到错误。
文件内容如下:
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
我希望得到错误+包名。
有人可以告诉我需要做什么才能进行适当的调整吗?
yum
正在将错误消息写入 stderr
,而不是 stdout
。您看到的是 yum
打印的错误消息,而不是您的脚本。
您需要将 stderr
重定向到 stdout
以便捕获并检查它。
从文件中读取的行中删除尾随换行符也是一个好主意,pkg = pkg.strip()
command=f'yum --showduplicates list ' + pkg + ' 2>&1'
我用另一种方式编写了脚本来获取我正在寻找的数据。谢谢您的帮助!你激发了 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)