我有以下代码,其中有一个用户名列表,我尝试使用 net user \domain | find somegroup
检查用户是否在特定的 Windows 用户组中。
问题是我为每个用户名大约 8 个用户组运行该命令而且速度很慢。我想使用 futures 甚至单独的线程发送这些调用(如果它更快)。
在我做任何其他事情之前,我只需要等到最后。我该如何在 Python 中完成它?
for one_username in user_list:
response = requests.get(somecontent)
bs_parsed = BeautifulSoup(response.content, 'html.parser')
find_all2 = bs_parsed.find("div", {"class": "QuickLinks"})
name = re.sub("\s\s+", ' ', find_all2.find("td", text="Name").find_next_sibling("td").text)
find_all = bs_parsed.find_all("div", {"class": "visible"})
all_perms = ""
d.setdefault(one_username + " (" + name + ")", [])
for value in find_all:
test = value.find("a", {"onmouseover": True})
if test is not None:
if "MyAppID" in test.text:
d[one_username + " (" + name + ")"].append(test.text)
for group in groups:
try:
d[one_username + " (" + name + ")"].append(check_output("net user /domain " + one_username + "| find \"" + group + "\"", shell=True, stderr=subprocess.STDOUT).strip().decode("utf-8"))
except Exception:
pass
原文由 orange 发布,翻译遵循 CC BY-SA 4.0 许可协议
(这个答案目前忽略了 HTML 解析你的代码……你可以将它排队到一个池中,就像这种方法排队
net user
调用一样)首先,让我们定义一个函数,它接受
tuple
的(user, group)
并返回所需的信息。现在,我们可以使用
multiprocessing.dummy.Pool
在线程池中运行它results
是(user, group, data)
元组的列表,可以根据需要进行处理。注意: 由于平台差异,此代码目前未经测试