我正在尝试获取Windows拥有的本地用户列表。
我发现可以使用win32net.NetUserEnum以字典的形式获取列表,但是,由于我只需要用户名,因此我试图从dict中获取该信息,并且我设法做到了已经。
但是我仍然有一个问题,脚本正在返回此消息:
管理员回溯(最近一次拨打电话):来宾文件 DefaultAccount中的“ D:/QUIZ/OCRLAB/orissupportaut.py”,第9行 for listausers [i]中的用户:userjohn TypeError:'int'对象不是可迭代的teste UtilityAccount
有谁知道为什么会这样吗?
谢谢
import win32api
import win32net
import win32netcon
listausers = win32net.NetUserEnum(None,2)
utilizadores= []
for i in range(len(listausers)):
for user in listausers[i]:
if type(user) == int:
pass
else:
print(user.get("name"))
答案 0 :(得分:2)
这符合您的要求吗?使用isinstance而不是检查类型的值。之所以出现此错误,是因为NetUserEnum返回了一个由用户字典和一些附加值(整数)组成的列表,如here所述。
import win32api
import win32net
import win32netcon
listausers = win32net.NetUserEnum(None,2)
utilizadores= []
for i, users in enumerate(listausers):
if not isinstance(users, int):
for user in users:
if isinstance(user, int):
pass
else:
print(user.get("name"))
您也可以通过切片列表来查看字典本身。
for user in listausers[0]:
print(user.get("name"))
答案 1 :(得分:1)
基于CDJB的答案,我会将所有内容压缩为简单的内容:
import win32api
import win32net
import win32netcon
listausers = win32net.NetUserEnum(None, 2)[0] # 0 to ignore the extra returned values.
utilizadores = [user.get("name") for user in listausers]
答案 2 :(得分:-1)