树莓派Linux环境下无需sudo调用psutil.users()的解决方案求助
问题原因
psutil.users() 依赖读取 /var/run/utmp 文件获取登录用户列表,树莓派系统默认该文件仅对 root 用户和 utmp 组开放读取权限,普通用户无访问权限,因此非 sudo 运行时返回空列表。
解决方案
方案一:赋予普通用户读取 utmp 文件的权限
将当前用户加入 utmp 用户组,即可获取该文件的读取权限:
sudo usermod -aG utmp $USER
执行命令后注销并重新登录,再运行原 Python 脚本即可正常获取用户列表。
方案二:不依赖 psutil,直接获取当前运行脚本的用户
如果仅需获取当前运行脚本的用户(而非所有登录用户),推荐以下无需修改系统权限的方法,兼容性更强(尤其适配服务启动场景):
import os import pwd def get_current_username(): # 通过用户ID映射获取用户名,后台服务场景也能正常工作 return pwd.getpwuid(os.getuid())[0] def main(): user = get_current_username() print(user) if __name__ == "__main__": main()
补充说明
- 终端运行场景下,也可直接读取环境变量:
os.environ.get('USER'),但后台服务环境变量可能不完整,pwd.getpwuid(os.getuid())可靠性更高。 os.getlogin()不适用于服务启动场景,因为后台服务无关联终端会话,会抛出异常。
内容的提问来源于stack exchange,提问作者Matt Clarke
相关产品推荐
相关产品推荐

