Flask接口签名sign原理与实例代码浅析
495
2023-01-12
Java与Python之间使用jython工具类实现数据交互
最近有个功能需要java与python之间的数据交互,java需要把参数传给python,然后python计算的结果返回给java.于是就写了一个工具类.
首先,maven 需要加载jython的依赖.工具类代码如下:
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.poi.ss.formula.functions.T;
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.core.PyString;
import org.python.util.PythonInterpreter;
/**
* @ClassName: JythonUtils
* @Description:TODO(jython 工具类)
* @author: zy
* @date:
*
* @Copyright: 2018 Inc. All rights reserved.
* 注意:
*/
public class JythonUtils {
/**
* @Title: jythonInit
* @Description: TODO(初始化jython)
* @param: @return
* @return: PythonInterpreter
* @throws
*/
public static PythonInterpreter jythonInit(){
//初始化site 配置
Properties props = new Properties();
props.put("python.home", ""); //python Lib 或 jython Lib,根据系统中该文件目录路径
props.put("python.console.encoding", "UTF-8");
props.put("python.security.respectJavaAccessibility", "false");
props.put("python.import.site", "false");
Properties preprops = System.getProperties();
PythonInterpreter.initialize(preprops, props, new String[0]);
//创建PythonInterpreter 对象
PythonInterpreter interp = new PythonInterpreter();
return RHuZZqdAyZinterp;
}
/**
* @Title: loadPythonFile
* @Description: TODO(加载python 源码文件,)
* @param: @param interp
* @param: @param filePath ,比如:F:\\jpython_jar\\jpythonTest\\pythonTest.py 或/testpython/test.py
* @param: @return
* @return: PythonInterpreter
* @throws
*/
public static PythonInterpreter loadPythonFile(PythonInterpreter interp, String filePath){
interp.execfile(filePath);
return interp;
}
/**
* @Title: loadPythonFunc
* @Description: TODO(加载python 源码文件中的某个方法)
* @param: @param interp
* @param: @param functionName
* @param: @return
* @return: PyFunction
* @throws
*/
public static PyFunction loadPythonFunc(PythonInterpreter interp, String functionName){
//加载方法
PyFunction func = (PyFunction) interp.get(functionName,PyFunction.class);
return func;
}
/**
* @Title: execFunc
* @Description: TODO(执行无参方法,返回PyObject)
* @param: @param func
* @return: PyObject
* @throws
*/
public static PyObject execFunc(PyFunction func){
PyObject pyobj = func.__call__();
return pyobj;
}
/**
* @Title: execFuncToString
* @Description: TODO(执行无参方法,返回一个字符串)
* @param: @param func
* @param: @return
* @return: String
* @throws
*/
public static String execFuncToString(PyFunction func){
PyObject pyobj = execFunc(func);
return (String) pyobj.__tojava__(String.class);
}
/**
* @Title: execFuncToString
* @Description: TODO(执行有参方法,返回一个字符串)
* @param: @param func
* @param: @param paramName ,参数名
* @param: @return
* @return: String
* @throws
*/
public static String execFuncToString2(PyFunction func, String paramName){
PyObject pyobj = func.__call__(new PyString(paramName));
return (String) pyobj.__tojava__(String.class);
}
/**
* @Title: execFuncToInteger
* @Description: TODO(执行无参方法,返回一个Integer)
* @param: @param func
* @param: @return
* @return: Integer
* @throws
*/
public Integer execFuncToInteger(PyFunction func){
PyObject pyobj = execFunc(func);
return (Integer) pyobj.__tojava__(Integer.class);
}
/**
* @Title: execFuncToList
* @Description: TODO(执行无参方法,返回一个List)
* @param: @param func
* @param: @return
* @return: List
* @throws
*/
public List
PyObject pyobj = execFunc(func);
return (List
}
/**
* @Title: execFuncToMap
* @Description: TODO(执行无参方法,返回一个Map
* @param: @param func
* @param: @return
* @return: Map
* @throws
*/
public Map
PyObject pyobj = execFunc(func);
return (Map
}
public void execFuncToByParamsList(PyFunction func, List
}
public static void main(String[] args){
PythonInterpreter interp = jythonInit();
//文件名
String filePath = "F:\\jpython_jar\\jpythonTest\\pythonTest.py";
interp = loadPythonFile(interp, filePath);
//函数名
String functionName = "count";
PyFunction func = loadPythonFunc(interp, functionName);
//执行无参方法,返回PyObject
PyObject pyobj = execFunc(func);
//执行无参方法,返回String
String resultStr = execFuncToString(func);
//执行有参方法,返回String
String paramName = "name";
String resultStr2 = execFuncToString2(func, paramName);
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~