过滤subprocess.check_output的输出

时间:2012-11-05 20:33:25

标签: regex python-2.7

我正在尝试将列表的值与正则表达式模式匹配。如果列表中的特定值匹配,我会将其附加到不同的dicts列表中。如果上述值不匹配,我想从列表中删除该值。

import subprocess

def list_installed():
    rawlist = subprocess.check_output(['yum', 'list', 'installed']).splitlines()
    #print rawlist
    for each_item in rawlist:
        if "[\w86]" or \
        "noarch" in each_item:
            print each_item #additional stuff here to append list of dicts
            #i haven't done the appending part yet
            #the list of dict's will be returned at end of this funct
        else:
            remove(each_item)

list_installed()

最终目标是最终能够做类似的事情:

nifty_module.tellme(installed_packages[3]['version'])
nifty_module.dosomething(installed_packages[6])

注意gnu / linux用户去wtf: 这最终会成长为一个更大的系统管理员前端。

1 个答案:

答案 0 :(得分:0)

尽管您的帖子中缺少实际问题,但我会发表一些评论。

  • 这里有问题:

    if "[\w86]" or "noarch" in each_item:
    

    它没有按你想象的方式解释,它总是评估为True。你可能需要

    if "[\w86]" in each_item or "noarch" in each_item:
    

另外,我不确定你在做什么,但是如果你希望Python在这里进行正则表达式匹配:它不会。如果您需要,请查看re模块。

  • remove(each_item)

    我不知道它是如何实现的,但是如果您希望从rawlist中删除该元素,它可能无效:remove将无法实际访问定义的列表在list_installed内。我建议改为使用rawlist.remove(each_item),但不是在这种情况下,因为您正在迭代rawlist。您需要稍微重新考虑该过程(创建另一个列表并将所需的元素附加到其中,而不是删除,例如)。