-1

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

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])

使用 wtf 的 gnu/linux 用户注意:这最终将成长为一个更大的 sysadmin 前端。

4

1 回答 1

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. 您需要重新考虑一下该过程(例如,创建另一个列表并将所需的元素附加到其中而不是删除)。

于 2012-11-05T20:45:59.157 回答