返回一个集合列表是毫无意义的

2024-09-27 21:26:01 发布

您现在位置: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 

Tags: 项目in列表foroutputdomainitemusers
2条回答

因为其他人已经回答了您的主要问题,覆盖了循环中的变量,所以我重写了它,使它只调用一次“tasklist”并解析输出,而不是对user\u 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

(考虑一下SysInternals' PsLoggedOn,它可以通过注册表快速查询登录的用户,也可以在远程计算机上运行)。你知道吗

您只在return查找最后一个排序的\u列表集,它必须是用户\u列表末尾的一个空集。你知道吗

基本上是这样的:

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

print f()

>>> 9

您应该.append()将已排序的列表转换为新列表,并在函数末尾返回该列表以恢复所有内容:

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

print f()

相关问题 更多 >

    热门问题