什么是Windows等价的pwd.getpwnam(用户名).pw_dir?

前端之家收集整理的这篇文章主要介绍了什么是Windows等价的pwd.getpwnam(用户名).pw_dir?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Python pwd模块提供对getpwnam(3)POSIX API的访问,该API可用于通过用户名获取特定用户的主目录,以及确定用户名是否有效.如果使用不存在的用户名调用,pwd.getpwnam将引发异常.

起初,似乎可以通过os.path.expanduser(‘~username’)以跨平台方式实现相同的结果.但是,似乎在Windows XP上使用Python 2.6,这实际上不会导致不存在的用户名失败.此外,在Windows XP上的Python 2.5上,即使对于有效用户来说似乎也失败了.

可以在Windows上可靠地获取此信息吗?怎么样?

阅读 2.6 documentation表明os.path.expanduser()在Windows上被破坏:

On Windows,HOME and USERPROFILE will
be used if set,otherwise a
combination of HOMEPATH and HOMEDRIVE
will be used. An initial ~user is
handled by stripping the last
directory component from the created
user path derived above.

说什么?这假设所有用户家庭必须位于同一父目录下.新加坡国立大学医院,唉!

这有点难以挖掘,但这里有一个解决方案,它将通过给定名称查找本地用户

from win32security import LookupAccountName,ConvertSidToStringSid
from _winreg import OpenKey,QueryValueEx,HKEY_LOCAL_MACHINE

def getUserDir(userName):
    ssid = ConvertSidToStringSid(LookupAccountName(None,userName)[0])
    key = OpenKey(HKEY_LOCAL_MACHINE,r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\\' + ssid)
    return QueryValueEx(key,'ProfileImagePath')[0]

猜你在找的Windows相关文章