我很确定我已将系统变量设置如下:
echo 'export TEST=/path/test' >> .bash_profile
echo 'export TEST=/path/test' >> .zshrc
可以从终端获取变量,如:
echo $TEST
#the '/path/test' was print out
但是我无法从python 3中获得它,如下所示:
TEST = os.getenv('TEST')
或
TEST = os.environ['TEST']
有谁知道为什么?任何线索将不胜感激
答案 0 :(得分:1)
您似乎对 environment 变量与(如您所说) system 变量之间的区别感到困惑。当你运行
echo 'export TEST=/path/test' >> .bash_profile
echo 'export TEST=/path/test' >> .zshrc
您正在做的是设置 environment 变量。当您启动shell子系统时,操作系统会调用某些启动文件来为您的环境设置变量。如果你在Bash shell中,它将调用.profile,.bash_profile等。当你获得shell时,你在启动脚本中设置的任何变量都是为你的环境设置的。例如:
pswaminathan ~ $ export TEST=/path/test
pswaminathan ~ $ python3
Python 3.4.0 (default, Mar 24 2014, 00:31:02)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.38)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.getenv('TEST')
'/path/test'
但$TEST
此处未在系统级别设置。它是在环境级别设置的。它依赖于被设定;在您的情况下,通过.zshrc或.bash_profile文件。例如,如果您正在通过cron运行脚本,则可以在crontab中设置环境变量。或者,您可以在用于运行这些内容的shell脚本中设置envvars。那么你如何运行这个文件,你没有得到正确的环境变量?