python:os.getenv返回没有与sudo?

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

当我尝试从python获取envvariables时:

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

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

但是当我用sudo调用ipython时:

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

我什么也得不到 我想这是关于envvariables横跨用户,但是什么是ditails? 我在/etc/bash.bashrc中设置了LIBRARY_PATH ,它被认为是“系统宽度的bashrc文件”。

那么怎样才能在python中使用sudo来获得正确的envvariables呢?

如果你想sudo通过环境变量(这通常被认为是一个安全隐患),使用sudo -E

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

 sudo bash -c ipython 

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

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

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