hug 无法读取环境变量
hug can't read environment variables
我正在尝试使用带有 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'
怎么了?
os.environ['INTEGER']
失败,因为 os.environ
没有名为“INTEGER
”的密钥。
您可以使用此代码,并提供一个可选的默认值作为 get
的第二个参数:
os.environ.get("INTEGER", 0)
如果找不到 INTEGER
,这将 return 0
(或您提供的任何默认值)。
缺少 INTEGER
的原因必须与您定义 bash 变量的位置有关。它必须 "in scope" 或根据您所在的脚本可访问 运行 脚本。
您的问题是您 运行宁 hug
为 sudo
(顺便说一句,您永远不应该这样做。)并以您(普通用户)的身份添加环境变量。
我猜你 运行 正在使用 sudo,因为你想 运行 在端口 80 上。运行 而不是在端口 8080 上。
所以这有效:
shell:
export INTEGER=5
python代码:
import os
@hug.get('/')
def view():
print(os.environ['INTEGER']) # or print(os.environ.get('INTEGER'))
shell:
hug -f app.py -p 8080
我正在尝试使用带有 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'
怎么了?
os.environ['INTEGER']
失败,因为 os.environ
没有名为“INTEGER
”的密钥。
您可以使用此代码,并提供一个可选的默认值作为 get
的第二个参数:
os.environ.get("INTEGER", 0)
如果找不到 INTEGER
,这将 return 0
(或您提供的任何默认值)。
缺少 INTEGER
的原因必须与您定义 bash 变量的位置有关。它必须 "in scope" 或根据您所在的脚本可访问 运行 脚本。
您的问题是您 运行宁 hug
为 sudo
(顺便说一句,您永远不应该这样做。)并以您(普通用户)的身份添加环境变量。
我猜你 运行 正在使用 sudo,因为你想 运行 在端口 80 上。运行 而不是在端口 8080 上。
所以这有效:
shell:
export INTEGER=5
python代码:
import os
@hug.get('/')
def view():
print(os.environ['INTEGER']) # or print(os.environ.get('INTEGER'))
shell:
hug -f app.py -p 8080