如何使用python找到真正的用户主目录?

asd*_*dfg 69 python linux windows directory home-directory

我看到如果我们更改HOME(linux)或USERPROFILE(windows)环境变量并运行python脚本,它会在我尝试时将新值作为用户主页返回,os.environ ['HOME'] os.exp

有没有办法找到真正的用户主目录而不依赖于环境变量?

编辑:
这是一种通过在注册表中阅读http://mail.python.org/pipermail/python-win32/2008-January/006677.html在Windows中查找userhome的方法

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

from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 84

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

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

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

在Windows上,如果设置将使用HOME和USERPROFILE,否则将使用HOMEPATH和HOMEDRIVE组合.通过从上面派生的创建的用户路径中剥离最后一个目录组件来处理初始化~user.

如果扩展失败或者路径没有以波浪号开头,则路径将保持不变.

所以你可以这样做:

os.path.expanduser('~user')
Run Code Online (Sandbox Code Playgroud)

  • 没错,但是在问题中改变环境变量也会"欺骗"这个方法.现在,为什么人们想要这样做,我不能说.:) (2认同)
  • `os.path.expanduser('~') ` (2认同)

Bri*_*unt 15

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

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir
Run Code Online (Sandbox Code Playgroud)


Jul*_*nze 13

from pathlib import *

str(Path.home())
Run Code Online (Sandbox Code Playgroud)

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

  • 在内部,“pathlib”仍然依赖于环境变量,因此这不能回答您的具体问题。由于更一般的问题都被标记为重复并在此处引用,因此这可能是该答案的最佳位置。 (2认同)

kha*_*zmi 6

对于窗户;

import os
homepath = os.path.expanduser(os.getenv('USERPROFILE'))
Run Code Online (Sandbox Code Playgroud)

将为您提供当前用户主目录的句柄

filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt'
Run Code Online (Sandbox Code Playgroud)

将为您提供以下文件的句柄;

C:\Users\urUserName\Documents\myfile.txt
Run Code Online (Sandbox Code Playgroud)


小智 5

home_folder = os.getenv('HOME')

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