拥抱不能读取环境变量

时间:2018-02-02 00:45:31

标签: python python-3.x hug

我试图通过拥抱来使用环境变量。但是,我不能。

我的第一步:

$ export INTEGER=5

我的主要代码中有这个:

import hug
import os


@hug.get('/')
def foo():
   var = os.environ['INTEGER']
   return {'INT':var}

当我执行

sudo hug -p 80 -f foo.py

然后转到localhost/

错误:

Traceback (most recent call last):
  File "/usr/local/Cellar/python3/3.6.4_2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/wsgiref/handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/lib/python3.6/site-packages/falcon/api.py", line 244, in __call__
    responder(req, resp, **params)
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/lib/python3.6/site-packages/hug/interface.py", line 734, in __call__
    raise exception
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/lib/python3.6/site-packages/hug/interface.py", line 709, in __call__
    self.render_content(self.call_function(input_parameters), request, response, **kwargs)
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/lib/python3.6/site-packages/hug/interface.py", line 649, in call_function
    return self.interface(**parameters)
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/lib/python3.6/site-packages/hug/interface.py", line 100, in __call__
    return __hug_internal_self._function(*args, **kwargs)
  File "repro.py", line 7, in foo
    var = os.environ['INTEGER']
  File "/Users/Andres/.local/share/virtualenvs/botCS-HzHaMvtf/bin/../lib/python3.6/os.py", line 669, in __getitem__
    raise KeyError(key) from None
KeyError: 'INTEGER'

出了什么问题?

2 个答案:

答案 0 :(得分:1)

您的问题是您正在运行hug作为sudo(您永远不应该做的事情)并添加环境变量(普通用户)。

我猜你正在以sudo身份运行,因为你想在端口80上运行。而是在端口8080上运行它。

这样可行:

<强>壳

export INTEGER=5

python代码:

import os

@hug.get('/')
def view():
    print(os.environ['INTEGER'])  # or print(os.environ.get('INTEGER'))

<强>壳

hug -f app.py -p 8080

答案 1 :(得分:0)

os.environ['INTEGER']失败,因为os.environ没有名为&#34; INTEGER&#34;的密钥。

您可以使用此代码,并提供可选的默认值作为get的第二个参数:

os.environ.get("INTEGER", 0)

如果找不到0,这将返回INTEGER(或您提供的任何默认值)。

缺少INTEGER的原因必须与您定义bash变量的位置有关。它必须是&#34;在范围&#34;或者根据您运行脚本的位置访问脚本。