我有一个复杂的软件,无法发布,也没有具体的工作示例。我会尽力解释问题,希望有人遇到过这个问题。
在Linux shell中,我定义了一个环境变量:
> export MY_TEST_ENV=4711
> echo $MY_TEST_ENV
> 4711
我想从复杂的代码中获取这个变量:
print os.getenv('MY_TEST_ENV')
该函数总是返回None
。如果我创建一个测试脚本来测试这个行为,即使在不同文件中的类中,我总是得到期望的行为,例如os.getenv('MY_TEST_ENV')
返回正确的值4711
。
代码是用sudo
启动的。
有什么想法是原因吗?
execve
系统调用启动一个进程,并且没有填充环境变量,那么子进程的环境变量会被清零。 - alexissudo
命令会以超级用户权限启动一个新的 shell,并根据安全策略清除环境变量。使用-E
(或--preserve-env
)选项可能会导致MY_TEST_ENV
变量被保留,也可能不会,这取决于您系统安全策略的具体情况。另一种方法是请求拥有适当访问权限的人通过编辑适当的初始化脚本将您想要注入到 root 环境中的变量注入到系统中。 - Greg Bacon