如何使用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可用,…
- 错误:执行任务':app:packageRelease'失败。 >无法计算/../AndroidStudioProjects/../classes.jar的散列
- Java的。 比较string时忽略重音符号