如何使用python获取所有Windows / Linux用户和不仅仅是当前用户

时间:2019-05-24 23:29:55

标签: python getpass

我知道如何使用os或getpass.getuser()获取当前用户,但是有一种方法可以获取所有用户的列表,而不仅仅是当前用户的列表?阅读os和getpass文档,但我什么也没做。

2 个答案:

答案 0 :(得分:0)

针对Windows的方法的两个想法:

from pathlib import Path
users = [x.name for x in Path(r'C:\Users').glob('*') if x.name not in ['Default', 'Default User', 'Public', 'All Users'] and x.is_dir()]
print(users)

C:\ Users

中的路径
import os
os.system('net user > users.txt')
users = Path('./users.txt').read_text()
print(users)

net user的输出

答案 1 :(得分:0)

这是特定于操作系统的。

在Linux中,请参见Python script to list users and groups

在Windows中:

  • 通过WMI

    • 解析wmic UserAccount get Name的输出,或
    • wmi module进行相同的呼叫:

      import wmi
      w=wmi.WMI()
      # The argument (field filter) is only really needed if browsing a large domain
      # as per the warning at https://docs.microsoft.com/en-us/windows/desktop/cimwin32prov/win32-useraccount
      # Included it for the sake of completeness
      for u in w.Win32_UserAccount(["Name"]): #Net
          print u.Name
      del u
      
  • 通过NetUserEnum API

    • 解析net user的输出,或
    • 使用pywin32进行相同的呼叫:

      import win32net, win32netcon
      names=[]; resumeHandle=0
      while True:
          data,_,resumeHandle=win32net.NetUserEnum(None,0,
                  win32netcon.FILTER_NORMAL_ACCOUNT,resumeHandle)
          names.extend(e["name"] for e in data)
          if not resumeHandle: break
      del data,resumeHandle
      print names