如何使用pythonfind真正的用户主目录?

我看到,如果我们更改HOME(linux)或USERPROFILE(windows)环境variables并运行一个python脚本,它会在用户home时返回新的值,os.environ ['HOME'] os.exp

有没有办法find真正的用户主目录,而不依赖于环境variables? 感谢名单。
编辑:
这里是通过在registry中读取在Windows中finduserhome的方法,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

编辑:
一种使用pywin32来查找windows的方法,

from win32com.shell import shell,shellcon home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0) 

我认为os.path.expanduser(path)可能会有所帮助。

在Unix和Windows上,返回带有由用户主目录replace的~~user的初始组件的参数。

在Unix上,如果设置了初始值,则由环境variablesHOME代替; 否则通过内置模块pwd在密码目录中查找当前用户的主目录。 直接在密码目录中查找初始~user

在Windows上,HOME和USERPROFILE将被使用,否则将使用HOMEPATH和HOMEDRIVE组合初始~user通过从上面导出的创build的用户path中剥离最后一个目录组件来处理

如果展开失败或者path不是以波形开始,则path将保持不变。

所以你可以做:

 os.path.expanduser('~user') 

我认为os.path.expanduser(path)是你的问题的最佳答案,但是在Unix世界中还有一个值得提及的select: pwd包。 例如

 import os, pwd pwd.getpwuid(os.getuid()).pw_dir 

home_folder = os.getenv('HOME')

这应该适用于Windows和Mac OS,在Linux上运行良好。

 from pathlib import * str(Path.home()) 

适用于Python 3.5及以上版本。 Path.home()返回一个提供API的Path对象,我发现它非常有用。

真的,环境variables的变化表明家庭必须改变。 所以每个程序/脚本都应该有新的上下文; 后果取决于改变它的人。 我仍然坚持home = os.getenv('USERPROFILE') or os.getenv('HOME')

究竟需要什么?

对于窗户;

 import os homepath = os.path.expanduser(os.getenv('USERPROFILE')) 

会给你一个处理当前用户的主目录和

 filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt' 

会给你下面的文件的处理;

 C:\Users\urUserName\Documents\myfile.txt 

我意识到这是一个已经回答的老问题,但我想我会加两分钱。 接受的答案不适合我。 我需要find用户目录,我希望它可以使用和不使用sudo 。 在Linux中,我的用户目录是“/ home / someuser”,但是我的根目录是“/ root /”。 但是,在我的Mac上,用户目录是“/ Users / someuser”。 这是我最终做的:

 _USERNAME = os.getenv("SUDO_USER") or os.getenv("USER") _HOME = os.path.expanduser('~'+_USERNAME) 

这在Mac和Linux上既可以使用也可以不使用sudo

在Linux和其他UNIXoids上,你可以随时查看/etc/passwd 。 主目录是第六个以冒号分隔的字段。 不知道如何比Windows上的环境variables做得更好。 将有一个系统调用它,但如果它是从Python可用,…