在python中,如何在Windows中获取当前用户SID?

在python中,如何在Windows中获取当前用户SID?,python,Python,我需要从python脚本中获取当前登录用户的SID。一个选项是在发送到命令提示符命令whoami/user时读取返回文本。但这真的很难看。肯定有更好的方法吗?在Mehrdad在评论中提到的programcreek网站上四处查看之后 我想到了这个 #pip安装pywin32 导入win32security desc=win32security.GetFileSecurity( “”,win32security.OWNER\u安全信息 ) sid=desc.getSecurityDescriptor

我需要从python脚本中获取当前登录用户的SID。一个选项是在发送到命令提示符命令whoami/user时读取返回文本。但这真的很难看。肯定有更好的方法吗?

在Mehrdad在评论中提到的programcreek网站上四处查看之后

我想到了这个

#pip安装pywin32
导入win32security
desc=win32security.GetFileSecurity(
“”,win32security.OWNER\u安全信息
)
sid=desc.getSecurityDescriptorRowner()
# https://www.programcreek.com/python/example/71691/win32security.ConvertSidToStringSid
sidstr=win32security.ConvertSidToStringSid(sid)
打印(“Sid为”,sidstr)
可能需要一些调整,因为我只是获取拥有当前目录的用户

pywin32上有一个示例

从ntsecuritycon导入*
导入win32api、win32security、winerror
#这是win32api.GetDomainName()的Python实现
def GetDomainName():
尝试:
tok=win32security.OpenThreadToken(win32api.GetCurrentThread(),
令牌(查询,1)
除win32api.error外,详细信息如下:
如果详细信息[0]!=winerror.ERROR\u NO\u令牌:
提升
#尝试打开进程令牌,因为没有线程令牌
#存在
tok=win32security.OpenProcessToken(win32api.GetCurrentProcess(),
令牌(U查询)
sid,attr=win32security.GetTokenInformation(tok,TokenUser)
win32api.CloseHandle(tok)
名称,dom,类型=win32security.LookupAccountSid(无,sid)
返回dom
如果“名称”=“\uuuuuuuu主要”:
打印(“域名为”,GetDomainName())
使用
sidstr=win32security.ConvertSidToStringSid(sid)
方法更改它

我认为,当前流程的用户更理想。(我只作为一个用户使用我的系统,因此我确信第一个用户适用于许多用例)