关于 Python 中 os 模块怎么获取环境变量的问题

2021-04-20 21:43:19 +08:00
 18870715400
import os
os.getenv("hello")

如上所示, 如果我在终端中使用 sudo python3 执行上面代码, 获取到的就是系统的环境变量. 我的有一个脚本是使用 root 权限启动的, 导致我获取到的环境变量是系统级别的环境变量, 那么我这边有没有什么 python 方法在 root 用户运行脚本的时候获取到这个"hello"的用户级别的环境变量呢, 各位大佬有方法么?

1627 次点击
所在节点    Python
10 条回复
learningman
2021-04-20 21:49:47 +08:00
subprocess.popen
su user && export
行不(
ClericPy
2021-04-20 21:56:44 +08:00
既然是 linux..

1. sudo su -u hello python3 xx.py
2. export a=b; python3 yy.py
3. source xxx; python3 zz.py

随手打的, 不确定具体可用
18870715400
2021-04-20 21:57:08 +08:00
@learningman 你的这个方法好像不行, 我在终端执行直接进入 bash 命令行了.
18870715400
2021-04-20 21:57:47 +08:00
@ClericPy 这边用的是 mac 系统
Jirajine
2021-04-20 22:00:06 +08:00
环境变量没有什么系统的、用户的之分,都是从父进程继承的。你用 root 启动获取到的就是 root 用户的环境变量。
你可以让 sudo 为你保留环境变量,或以普通用户启动以后再提权。
ungrown
2021-04-21 09:07:03 +08:00
变量如果隐私不敏感的话,可以先用非 root 用户权限跑个脚本把变量保存到配置文件
18870715400
2021-04-21 09:48:02 +08:00
这边发现变量的值使用的是用用户名字直接拼接的, 这边就不用获取变量了.
no1xsyzy
2021-04-21 13:34:31 +08:00
这显然是一个 X-Y 问题
sudo 会影响非常多的环境变量,试试 sudo env | diff <(env) /dev/fd/0

另外,用户名拼接实际上很可能也是误解。比如 $HOME 其实是从 /etc/passwd 读取的,只不过默认采用 /home/$USER 罢了。
arischow
2021-04-21 15:56:23 +08:00
在该项目中的 virtualenv 管理对应的环境变量
julyclyde
2021-05-08 16:38:51 +08:00
说白了这事和 python 没啥关系

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772003

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX