python没有正确读取shell环境变量(缺少前导“等号”)

时间:2013-12-25 22:26:14

标签: python django shell virtualenv zsh

我的shell(特别是zsh)变量的输出与Python的os.environ输出不同。

当我尝试按照Django的两个Scoops中的内容阅读Django网站时,我遇到了这个问题。

我正在尝试将SECRET_KEY值放入virtualenv的{​​{1}}脚本中。

以下是我在bin/activate末尾的内容:

bin/activate

激活virtualenv后执行export SECRET_KEY="=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z" 会给出:

echo $SECRET_KEY

正如所料。但是,当我使用以下方法在Python中访问该变量时:

=43v#b7jdiam3#j1s^#ulg=(+ofl=a&^m8-4z
它给了我......

import os
print os.environ["SECRET_KEY"]

(没有前导等于符号)。

我不知道差异的根源在哪里。我甚至不知道这是否是一个问题,但shell和python以不同的方式读取它们似乎很奇怪。

Django项目似乎运行良好。环境变量中的这种差异是否会出现问题?

更新

我用单引号替换了导出行。结果如下:

43v#b7jdiam3#j1s^#ulg=(+ofl=a&^m8-4z

其中[1]是终端上[1] =43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z [2] 43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z 的结果,而[2]是python shell上echo $SECRET_KEY的结果。

更新2:

我在Mac OS X 10.8和Homebrew ZSH 5.0.4上使用Homebrew Python 2.7.6。

我继续调查并使用bash代替zsh。它运作正常!

现在,这是import os; print os.environ["SECRET_KEY"]zsh中的问题吗?

更新3:

我使用virtualenv在virtualenv之外做了export行,并在python中再次检查了变量。问题依然存在。因此,我认为问题在于zsh

1 个答案:

答案 0 :(得分:0)

如果你输入单引号就可以了:

spaghetti% export SECRET_KEY='=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z' 
spaghetti% python
Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os; print os.environ["SECRET_KEY"]
=43v#b7jdiam3#j1$02s^#ul$uc$=32g=(+ofl=a&$r_^m8-4z