如何在WSL2中通过Python获取Windows用户主目录?
在WSL2的Python脚本中获取Windows用户主目录的方法
从WSL2的视角来看,Windows用户主目录的路径格式为/mnt/c/Users/<WINUSERNAME>,而WSL2自身的Linux用户主目录路径为/home/<LINUXUSERNAME>。使用pathlib.Path.home()只能获取后者:
from pathlib import Path home = str(Path.home()) print(home) # 输出示例:/home/linux_user
如果需要在WSL2的Python脚本中获取Windows用户主目录,且不假设Windows与Linux用户名一致,可以用以下两种可靠方法:
方法一:读取同步的Windows环境变量
WSL2默认会同步当前Windows用户的环境变量,其中USERPROFILE变量对应Windows用户主目录,且WSL会自动将其转换为Linux格式的路径(如/mnt/c/Users/WinUser)。直接读取该变量即可:
import os win_user_home = os.environ.get('USERPROFILE') if win_user_home: print(win_user_home) # 输出示例:/mnt/c/Users/John
这个方法无需额外依赖,是最简便且可靠的方案,完全不依赖用户名是否一致。
方法二:通过Windows注册表查询(兼容特殊场景)
如果遇到环境变量未同步的特殊情况,可以直接调用Windows的reg.exe工具查询注册表中的用户主目录路径,再转换为WSL格式:
import subprocess # 调用reg命令查询Windows用户主目录的注册表项 proc = subprocess.run( ['reg.exe', 'query', r'HKEY_CURRENT_USER\Environment', '/v', 'USERPROFILE'], capture_output=True, text=True, check=True ) # 解析命令输出,提取Windows路径 output_lines = proc.stdout.strip().split('\n') win_path = output_lines[-1].split(maxsplit=3)[-1].strip() # 转换为WSL兼容的Linux格式路径 wsl_path = win_path.replace('C:\\', '/mnt/c/').replace('\\', '/') print(wsl_path) # 输出示例:/mnt/c/Users/John
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

