返回set_list是空白的

时间:2014-03-29 14:54:49

标签: python

我尝试迭代项目列表并使用列表中的每个项目执行subprocess.check_output命令。然后我使用一些列表推导来过滤输出,最后使用set(list)来删除重复项。我现在正在尝试返回set(list),但它会一直返回[]。任何人都可以解释这是什么问题吗?

def local_file(domain, user_list, debug):
    """function iterates list of target users locally"""
    if debug == True:
        print "Local search based on user-file."
    else:
        pass
    print "Targeted Users Found On LocalHost\n"
    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)
            for item in sorted_list:
                print item
        except CalledProcessError as e:
            errormessage = e.output
            print errormessage
    print "\nCompleted"
    return sorted_list 

2 个答案:

答案 0 :(得分:1)

您只是return最后一个sorted_list集,它必须是user_list末尾的空集。

基本上就是这样:

def f():
    for i in range(10):
        var = i
    return var

print f()

>>> 9

您应该将您的sorted_list .append()添加到新列表中并在函数末尾返回以获取所有内容:

def f():
    varList = []
    for i in range(10):
        var = i
        varList.append(var)
    return varList

print f()

答案 1 :(得分:0)

当别人回答你的主要问题,覆盖循环中的变量时,我已经重写了这个,所以它只调用'tasklist'一次并解析输出,而不是一遍又一遍地为user_list中的每个用户调用它: / p>

import subprocess
import csv

user_list = ['Test']
domain='MyPC'

tasklist = subprocess.check_output("tasklist /V /FO CSV")
tasks = csv.DictReader(tasklist.splitlines(), dialect="excel")

users = set()
for task in tasks:
    if task['User Name'] == 'N/A': continue
    task_domain, task_user = task['User Name'].split('\\')

    if domain == task_domain and task_user in user_list:
        users.add(task_user)

print '\n'.join(users)
# return users

(考虑SysInternals' PsLoggedOn哪些查询通过注册表快速登录用户,并且也可以针对远程计算机运行。