我的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
。
答案 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