【问题标题】:hug can't read environment variables拥抱无法读取环境变量
【发布时间】:2018-02-02 00:45:30
【问题描述】:

我正在尝试使用带有 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'

怎么了?

【问题讨论】:

    标签: python python-3.x hug


    【解决方案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
    

    【讨论】:

    • 如果我想在 80 端口上运行,我需要使用sudo。无论如何,它可以在 8080 端口上解决您的问题。非常感谢。
    【解决方案2】:

    os.environ['INTEGER'] 失败,因为os.environ 没有名为“INTEGER”的键。

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

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

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

    INTEGER 丢失的原因必须与您定义 bash 变量的位置有关。根据您运行脚本的位置,它必须在“范围内”或可供脚本访问。

    【讨论】:

    • 第一步我做了$ export INTEGER=5。你的答案是有效的,但它返回0。我需要一个5
    猜你喜欢
    • 2019-11-21
    • 2014-08-16
    • 2019-07-16
    • 1970-01-01
    • 2015-07-17
    • 2021-10-28
    • 2013-06-07
    • 2020-01-27
    • 2018-03-04
    相关资源
    最近更新 更多