JavaとPythonの間でjythonツールクラスを使ってデータのインタラクションを実現します。
5658 ワード
最近はjavaとpythonの間のデータのインタラクションが必要です。javaはパラメータをpythonに渡す必要があります。そしてpythonで計算した結果をjavaに返します。そこでツールクラスを書きました。
まず、Mavenはjythonの依存をロードする必要があります。ツールコードは以下の通りです。
以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。もっと知りたいなら、下のリンクを見てください。
まず、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 interp;
}
/**
* @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<T>
* @throws
*/
public List<T> execFuncToList(PyFunction func){
PyObject pyobj = execFunc(func);
return (List<T>) pyobj.__tojava__(List.class);
}
/**
* @Title: execFuncToMap
* @Description: TODO( , Map<String, Object>)
* @param: @param func
* @param: @return
* @return: Map<String,Object>
* @throws
*/
public Map<String, Object> execFuncToMap(PyFunction func){
PyObject pyobj = execFunc(func);
return (Map<String, Object>) pyobj.__tojava__(Map.class);
}
public void execFuncToByParamsList(PyFunction func, List<T> paramsList){
}
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);
}
}
締め括りをつける以上はこの文章の全部の内容です。本文の内容は皆さんの学習や仕事に対して一定の参考学習価値を持ってほしいです。ありがとうございます。もっと知りたいなら、下のリンクを見てください。