2012-11-05 54 views
-1

我試圖將列表的值與正則表達式模式匹配。如果列表中的特定值匹配,我會將它附加到不同的列表中。如果上述值不匹配,我想從列表中刪除值。subprocess.check_output的篩選器輸出

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的用戶會跆拳道: 這將最終成長爲一個更大的系統管理員前端。

+0

但問題是什麼? – Vicent

回答

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。您需要重新考慮一下過程(例如,創建另一個列表並向其添加所需的元素,而不是刪除)。

+0

謝謝!這回答了我的問題,它總是評估爲真!您還向我提供了有關刪除的信息,接下來我會遇到這種情況。 :-) –