【发布时间】:2018-01-09 07:16:41
【问题描述】:
我使用 Python 已经有一段时间了。我也将我的 python 代码与 java UI 集成并且工作正常。
现在棘手的部分来了。
我需要将我的 python 脚本公开为一个 API,以便它可以从任何地方执行(也欢迎任何其他实现这一点的建议),而不依赖于存在 python 脚本的一台特定机器。
下面给出我的初始基本代码 sn-p 供您参考:
import .....
def main(id1, id2):
do something ........
call sub-function(id1, id2)
do something ........
if __name__ == '__main__':
id1 = sys.argv[1] #Getting first argument from Java UI.
id1 = sys.argv[1] #Getting first argument from Java UI.
main(id1, id2) #Calling Main function using two IDs as arguments.
只要我从 java 指向系统中的脚本路径,此代码就可以正常工作。但我需要更改此代码结构以将其公开为 API 或服务。我不知道如何实现这一目标。在几篇文章的帮助下,我尝试了使用 Flask 框架的运气。但我不确定如何通过提供参数来使用烧瓶调用主函数。
import .....
from flask import Flask
app = Flask(__name__)
@app.route("/")
def main():
do something ........
id1 = app.config.get['ID1']
id2 = app.config.get['ID2']
call sub-function(id1, id2)
do something ........
if __name__ == '__main__':
#For simplicity I supplied the arguments' values manually instead of getting it from java.
app.config['ID1'] = 101
app.config['ID2'] = 2
app.run(debug=True)
#Commented out calling main function since app.run() will take care
#main(id1, id2) #Calling Main function using two IDs as arguments.
当我执行此操作并转到默认网址 (http://127.0.0.1:5000) 时,我收到以下错误
TypeError: 'builtin_function_or_method' 对象不可下标
Traceback(最近一次调用最后一次)文件 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1997,在调用中返回 self.wsgi_app(environ, start_response) 文件 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1985 年,在 wsgi_app 响应 = self.handle_exception(e) 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1540, 在 handle_exception reraise(exc_type, exc_value, tb) 文件中 "C:\Users\user_name\Anaconda3\lib\site-packages\flask_compat.py", 第 33 行,在 reraise raise value 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1982 年,在 wsgi_app response = self.full_dispatch_request() 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1614,在 full_dispatch_request rv = self.handle_user_exception(e) 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1517,在handle_user_exception reraise(exc_type,exc_value,tb)文件 "C:\Users\user_name\Anaconda3\lib\site-packages\flask_compat.py", 第 33 行,在 reraise raise value 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1612,在full_dispatch_request rv = self.dispatch_request() 文件中 “C:\Users\user_name\Anaconda3\lib\site-packages\flask\app.py”,行 1598,在 dispatch_request 中返回 self.view_functionsrule.endpoint 文件 “C:\Users\user_name\Main_Script.py”,第 29 行,在 main id1 = app.config.get['ID1'] TypeError: 'builtin_function_or_method' 对象 不可下标 调试器在您的 WSGI 中捕获了异常 应用。您现在可以查看导致错误的回溯。 要在交互式回溯和纯文本回溯之间切换,您 可以点击“Traceback”标题。从文本回溯中,您可以 也创建它的粘贴。对于代码执行,将鼠标悬停在您的框架上 想要调试,点击右侧的控制台图标。
您可以在堆栈帧中执行任意 Python 代码 有一些额外的帮助器可用于自省:
dump() 显示帧中的所有变量 dump(obj) 转储所有的 了解对象
谁能告诉我如何解决这个问题,以及如何通过将其公开为 API 或服务从任何机器执行此脚本。
【问题讨论】:
标签: python-3.x api web-services flask flask-restful