python:os.getenv用sudo返回none?

时间:2017-02-27 03:57:31

标签: python linux environment-variables

我在LIBRARY_PATH中设置了环境变量/etc/bash.bashrc,最后添加了export LIBRARY_PATH=/usr/local/cuda/lib64:$LIBRARY_PATH

当我尝试从python中获取env变量时:

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

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

但是当我用sudo

调用ipython时
sudo ipython
import os
pront os.getenv('LIBRARY_PATH')

我一无所获。我想这是关于用户的env变量,但是什么是ditails?我在LIBRARY_PATH中设置/etc/bash.bashrc,这被称为'系统范围的bashrc文件'。

那么如何在python中使用sudo获取正确的env变量?

2 个答案:

答案 0 :(得分:1)

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

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

sudo bash -c ipython

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

有关sudo如何清除环境的详细信息,请键入man 5 sudoers并跳至Command environment部分。

答案 1 :(得分:0)

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