V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
18870715400
V2EX  ›  Python

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

  •  
  •   18870715400 · 2021-04-20 21:43:19 +08:00 · 1641 次点击
    这是一个创建于 1321 天前的主题,其中的信息可能已经有所发展或是发生改变。
    import os
    os.getenv("hello")
    

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

    10 条回复    2021-05-08 16:38:51 +08:00
    learningman
        1
    learningman  
       2021-04-20 21:49:47 +08:00
    subprocess.popen
    su user && export
    行不(
    ClericPy
        2
    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
        3
    18870715400  
    OP
       2021-04-20 21:57:08 +08:00
    @learningman 你的这个方法好像不行, 我在终端执行直接进入 bash 命令行了.
    18870715400
        4
    18870715400  
    OP
       2021-04-20 21:57:47 +08:00
    @ClericPy 这边用的是 mac 系统
    Jirajine
        5
    Jirajine  
       2021-04-20 22:00:06 +08:00 via Android   ❤️ 1
    环境变量没有什么系统的、用户的之分,都是从父进程继承的。你用 root 启动获取到的就是 root 用户的环境变量。
    你可以让 sudo 为你保留环境变量,或以普通用户启动以后再提权。
    ungrown
        6
    ungrown  
       2021-04-21 09:07:03 +08:00
    变量如果隐私不敏感的话,可以先用非 root 用户权限跑个脚本把变量保存到配置文件
    18870715400
        7
    18870715400  
    OP
       2021-04-21 09:48:02 +08:00
    这边发现变量的值使用的是用用户名字直接拼接的, 这边就不用获取变量了.
    no1xsyzy
        8
    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
        9
    arischow  
       2021-04-21 15:56:23 +08:00
    在该项目中的 virtualenv 管理对应的环境变量
    julyclyde
        10
    julyclyde  
       2021-05-08 16:38:51 +08:00
    说白了这事和 python 没啥关系
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   973 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:47 · PVG 06:47 · LAX 14:47 · JFK 17:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.