2014-03-30 47 views
0

以下列表理解users = [item for item in out.split() if domain in item and userl in item],因爲它表明它應該只將用戶添加到users()如果他們符合domainuserl條件。不過,我在sorted_list中得到了空的結果。誰能建議爲什麼列表理解不按預期方式工作

domain = 'domainanme' 
user_list = [test1, test2, test3] 
new_list = [] 

for userl in user_list: 
    try: 
     out = subprocess.check_output(["tasklist", "/V", "/FO", "List", "/FI", "USERNAME eq {0}\{1}" .format(domain, userl)], stderr=subprocess.STDOUT) 
     users = [item for item in out.split() if domain in item and userl in item] 
     sorted_list = set(users) 
     print sorted_list 
     if sorted_list != None: # this was an attempted to remove the EMPTY items 
      for name in sorted_list: 
       print name 
       new_list.append(name) 
      else: 
       pass 

打印輸出名稱

set([]) 
set([]) 
set([]) 

這是輸出的樣子:

tasklist output

+0

'item'是一個列表還是一個字符串? –

+0

@Yaw im不完全確定我假定一個字符串作爲其從tasklist cmd的輸出。 – iNoob

+3

如果你可以給我們一個'tasklist'輸出樣本,這將有所幫助。 'out'*包含什麼?*? –

回答

0

在輸出中的域名是大寫的;確保你考慮到這一點。歸一的情況下保證不區分大小寫的匹配:

users = [item for item in out.split() if domain.upper() in item.upper() and userl in item] 

我解析輸出多一點聰明如上面很容易引起假陽性(即有兩個進程名稱域和用戶名,即使是重疊的文本也會匹配)。

+0

感謝您的建議Martijn Pieters – iNoob