sudo运行Python脚本时如何获取普通用户的home目录?
解决方案
方案1:通过sudo保留的UID获取(最可靠,通用场景)
sudo执行命令时会自动注入SUDO_UID环境变量,记录触发sudo命令的原普通用户ID,配合Python标准库pwd模块即可直接查询到对应用户的家目录:
import os import pwd def get_normal_user_home(): # 判定当前是否为sudo运行场景 if "SUDO_UID" in os.environ: original_uid = int(os.environ["SUDO_UID"]) # 根据UID查询用户完整信息 user_pwd_info = pwd.getpwuid(original_uid) return user_pwd_info.pw_dir # 非sudo场景直接返回当前用户家目录 return os.path.expanduser("~")
该方法不受用户数量限制,就算后续新增普通用户也能正常返回调用sudo的对应用户家目录。
方案2:单用户环境快速实现
你当前环境仅有一个普通用户,也可以直接读取/home目录下的用户目录获取路径,仅适合临时使用:
import os # 遍历/home目录取第一个非隐藏文件夹作为普通用户家目录 normal_user_home = f"/home/{next(d for d in os.listdir('/home') if not d.startswith('.'))}"
注意事项
不要直接使用os.path.expanduser("~")或pathlib.Path.home()获取家目录,sudo运行时这两个方法都会默认返回root用户的家目录/root,不符合需求。
内容的提问来源于stack exchange,提问作者sakthivel
相关产品推荐
相关产品推荐

