大家好我试图使用列表理解和一些过滤来清理列表。由于某种原因(这暗示我)过滤不会按预期工作,我已经仔细检查了我的语法并三重检查它几乎是正面的正确。
我期待类似的输出:
DOMAINNAME\USERNAME
我得到的是什么
C:\python27\filename
DOMAINNAME\USERNAME
上面告诉我,.format类型格式在我的下面的代码中不起作用。
def tllocal(domain):
try:
out = subprocess.check_output(["tasklist", "/V", "/FO", "List", "/FI", "USERNAME eq {0}\*" .format(domain)])
users = [item for item in out.split() if "{0}" and "\\" in item .format(domain)]
sortedl = set(users)
print sortedl
for name in sortedl:
print name
except CalledProcessError as e:
print(e.returncode)
return sortedl
我相信正是这条线造成了这个问题。
users = [item for item in out.split() if "{0}" and "\\" in item .format(domain)]
任何帮助都将不胜感激。
答案 0 :(得分:1)
你是对的,这是不正确的。这个表达
if "{0}" and "\\" in item .format(domain)
被解析为:
(if '{0}') and ("\\" in item .format(domain))
始终为True
,因为字符串文字'{0}'
始终为真。
编写上述内容的正确方法是all
:
[item for item in out.split() if all(x in item for x in (domain, '\\'))]
或简称为and
,因为您只有两个元素:
[item for item in out.split() if domain in item and '\\' in item]