Python 返回集合列表为空

Python 返回集合列表为空,python,Python,我正在尝试迭代项目列表并执行子流程。请使用列表中的每个项目检查\u output命令。然后我使用一些列表理解来过滤输出,最后set(list)来删除重复项。我现在试图返回集合(列表),但它一直返回[]。谁能解释一下是什么问题吗 def local_file(domain, user_list, debug): """function iterates list of target users locally""" if debug == True: print "

我正在尝试迭代项目列表并执行
子流程。请使用列表中的每个项目检查\u output
命令。然后我使用一些列表理解来过滤输出,最后
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 

您只能
return
ing最后一个排序的\u列表集,它必须是用户\u列表末尾的空集

基本上是这样的:

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

print f()

>>> 9
您应该
.append()
将已排序的\u列表添加到新列表中,并在函数末尾返回该列表以恢复所有内容:

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

print f()

由于其他人已经回答了您的主要问题,即覆盖循环中的变量,我已经重写了它,因此它只调用“tasklist”一次并解析输出,而不是对user_list中的每个用户反复调用它:

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

(请考虑哪些查询可以通过注册表快速登录到用户,也可以在远程计算机上运行)。

您确定
用户
不是空的吗?请先打印用户列表,然后再将其传递到set()函数。我已经检查过了,它不是空的。排序列表中项目的
也成功打印了每个项目。@atlastlistic arr ok这很有意义。你会在for循环中建议以下内容吗
sorted_list=new_list.append(item)
我不知道您的数据是什么样子,但我的第一个想法是在for循环外创建一个空列表,然后在for循环内创建一个空列表,
new_list.append(sorted_list)
用于每个集合,并在末尾返回新的_list
。它仍然生成一个空列表:$,如果我放置
返回新的\u列表
,如上所述。我没有任何
打印
项目。如果我把它放在我原来的帖子里的同一个地方。我仍然得到空白
return
代码背后的想法是识别系统上使用的帐户。因此,如果我有一个域管理员帐户,并且想知道这是否在我的网络上被错误地使用(例如用作服务帐户等),那么这不会回答问题question@iNoob其他人已经回答了这个问题,没有别的话要说。我已经编辑了我的帖子,所以它现在是一个解决方案,提供了“用任务列表列出用户”的答案,尽管它是从您最初的方法重新设计的。我已经查看了psloggedon,它不包含我需要的一些功能,所以它不是一个可行的选项。无论如何,谢谢你;)用户列表中的
if domain==task\u domain和task\u user:users.add(user)
不起作用,因为我在
if
语句中没有用于添加的“项”?