java和python的数据交互的两种方式

方案一:jpython
  • 需要在java中加载py文件生成拦截器,调用相应的方法
  • 传参需要转换成jpython中的相应类型

总结:自由度不够高,耦合性太强,且尚不得知py文件间存在依赖是否会引发问题。

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:\\Python27\\programs\\my_utils.py");
PyFunction func = (PyFunction) interpreter.get("adder",
    PyFunction.class);

int a = 2010, b = 2;
PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("anwser = " + pyobj.toString());

参考链接:
https://blog.csdn.net/cafebar123/article/details/79394431
https://www.cnblogs.com/xuaijun/p/7986003.html

方案二:rest接口
  1. python的rest框架主要有:

    • Django,流行但是相对笨重
    • web.py,轻量,但据说作者仙逝无人维护
    • tornado,倡导自己造轮子,虽然是facebook开源
    • flask,简单易用(推荐使用)
  2. flask教程的参考链接:

    • https://www.jianshu.com/p/6ac1cab17929
    • https://blog.csdn.net/huangzhang_123/article/details/75206316
  3. 使用方式大致如下:安装flask—import flask—定义方法并在方法上加路径注解等—启动服务

    import json
    from flask import Flask
    from flask import request
    from flask import redirect
    from flask import jsonify
    app = Flask(__name__)
    
    @app.route('/' , methods=['GET', 'POST'])
    def index():
        if request.method == 'POST':
            a = request.get_data()
            dict1 = json.loads(a)
            return json.dumps(dict1["data"])
        else:
            return '

只接受post请求!

' @app.route('/user/') def user(name): return'

hello, %s

' % name if __name__ =='__main__': app.run(debug=True)
  1. 此外,flask支持json的数据传输,这就解决方案一自由度不够高、不够灵活的问题了,参考链接:
    https://segmentfault.com/a/1190000007605055

  2. flask的拓展库flask restful
    https://www.cnblogs.com/wbin91/p/5927506.html

你可能感兴趣的:(python)