-1

我正在使用 Fedora 17 xfce,并且正在使用 Python 2.7.3 进行编程。Fedora 使用名为 yum 的包管理器。我有一个 python 脚本可以搜索这样的包:

import os
package = raw_input("Enter package name to search: ")
os.system("yum list " + package)

所以我想让python检查这个命令的输出中是否存在单词No matching packages to list。我检查了一个类似的问题,并在这里尝试了一些方法, 但字符串只包含输出的第一行。

提前致谢

4

2 回答 2

4

os.system 不会返回任何输出。您链接到的问题有正确的答案。如果您只得到输出的第一行,也许您正试图逐行读取它?

获得整个输出的正确方法是:

import subprocess
package = raw_input("...")
p = subprocess.Popen(["yum", "install", package], stdout=subprocess.PIPE)
out, err = p.communicate()
# Wait for the process to exit before reading
p.wait()    

full_output = out.read()
于 2012-09-09T09:41:34.217 回答
2

您可能希望为此使用subprocess模块,因为os.system()只返回命令的退出代码:

from subprocess import check_output
out = check_output(['yum', 'list', raw_input('package name')])

你也可以直接使用 Yum 的API来搜索包:

from yum import YumBase

base = YumBase()
for package, name in base.searchGenerator(['name'], ['python']):
    print(package.name, package.version)
于 2012-09-09T10:07:48.700 回答