我使用Python已有一段时间了。我已经将我的python代码与java UI集成,并且工作正常。
现在有了棘手的部分。
我需要将我的python脚本公开为API,以便可以从任何地方执行它(也欢迎任何其他建议),而不依赖于存在python脚本的特定机器。
我的初始基本代码段如下所示:
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框架。但我不知道如何通过提供参数来调用使用flask的main函数。
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'对象不可订阅
回溯(最近一次调用最后一次)文件 “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 response = self.handle_exception(e)文件中 “C:\ Users \ user_name \ Anaconda3 \ lib \ site-packages \ flask \ app.py”,行 1540,在handle_exception中重新加载(exc_type,exc_value,tb)文件 “C:\ Users \用户名\ Anaconda3 \ LIB \站点包\ flask_compat.py” 第33行,重新加注值文件 “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中重新加载(exc_type,exc_value,tb)文件 “C:\ Users \用户名\ Anaconda3 \ LIB \站点包\ flask_compat.py” 第33行,重新加注值文件 “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行,主要为id1 = app.config.get ['ID1'] TypeError:'builtin_function_or_method'对象 不可订阅调试器在您的WSGI中捕获了异常 应用。您现在可以查看导致错误的回溯。 要在交互式回溯和纯文本之间切换,您 可以点击“Traceback”标题。从文本追溯中你可以 还会创建它的粘贴。对于代码执行鼠标悬停在框架上 想调试并点击右侧的控制台图标。
您可以在堆栈框架中执行任意Python代码 是一些额外的帮助可用于内省:
dump()显示帧转储(obj)中的所有变量转储所有这些 了解对象
任何人都可以通过将其作为API或服务公开,让我知道如何解决此问题以及如何从任何计算机执行此脚本。
答案 0 :(得分:1)
据我所知,您正在寻找远程调用Python函数并将参数传递给它并获取结果。
例如:
@app.route('/<string:idOne>/<string:idTwo>')
def main(idOne,idTwo):
do something
return something
现在您可以发出HTTP GET请求。 例如: