我正在尝试将列表的值与正则表达式模式匹配。如果列表中的特定值匹配,我会将其附加到不同的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: 这最终会成长为一个更大的系统管理员前端。
答案 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
。您需要稍微重新考虑该过程(创建另一个列表并将所需的元素附加到其中,而不是删除,例如)。