【问题标题】:python: os.getenv returns none with sudo?python: os.getenv 使用 sudo 没有返回值?
【发布时间】:2017-02-27 03:57:31
【问题描述】:

我在/etc/bash.bashrc 中设置了环境变量LIBRARY_PATH,方法是在末尾添加export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH

当我尝试从 python 获取环境变量时:

ipython
import os
print os.getenv('LIBRARY_PATH')

一切正常,打印/usr/local/cuda/lib64:

但是当我使用 sudo 调用 ipython 时:

sudo ipython
import os
pront os.getenv('LIBRARY_PATH')

我什么也得不到。我想这是关于跨用户的环境变量,但细节是什么?我在/etc/bash.bashrc 中设置了LIBRARY_PATH,据说这是“系统范围的bashrc 文件”。

那么如何在 python 中使用 sudo 获得正确的环境变量?

【问题讨论】:

    标签: python linux environment-variables


    【解决方案1】:

    如果您希望sudo 传递环境变量(这通常被认为存在安全隐患),请使用sudo -E

    请注意,执行 bashrc 文件中命令的是 bashipython 显然不是 bashsudo 不会启动 shell 进程,更不用说 bash 进程,只是为了运行您请求它运行的命令。因此,sudo 命令或sudo 子进程不会执行任何 bashrc 文件。当然,你可以告诉sudo 运行一个 bash 进程:

    sudo bash -c ipython
    

    但是,bash 如果检测到它正在 sudo 进程中运行,则不会执行启动文件。

    有关sudo 如何清理环境的更多信息,请输入man 5 sudoers 并跳至Command environment 部分。

    【讨论】:

    • 感谢您的耐心解答,问题已解决!
    【解决方案2】:

    如果您在 /root/.bash_profile 中设置环境变量,那么您在使用 sudo 时可能会获得所需的行为。

    【讨论】:

    • @rici 的回答解决了我的问题,也谢谢你。
    猜你喜欢
    • 2020-10-13
    • 2019-04-25
    • 2012-09-04
    • 1970-01-01
    • 2020-12-12
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    相关资源
    最近更新 更多