Util类:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.List;
import com.gexin.fastjson.JSON;
import net.sf.json.JSONObject;
/**
*
* @author Hi
*
*/
public class PythonUtils {
/**
* 获取Python返回数据</br>
* </br>
* 传入参数:dataList[0]=默认为python,就是python执行的函数</br>
* 传入参数:dateList[1]=python脚本执行的位置,示例:D:/FileDate/Python/test_p2.py</br>
* 传入参数:dateList[2]=python脚本接受参数,第一个</br>
* 传入参数:dateList[3]=python脚本接受参数,第二个</br>
* 传入参数:dateList[...]=python脚本接受参数,第...个,注意传入顺序</br>
* @param dateList
* @return
*/
public static Object getPyData(List<String> dateList) {
// 创建返回参数
Object obj = null;
try {
String[] arguments = new String[dateList.size()];
dateList.toArray(arguments);
Process process = Runtime.getRuntime().exec(arguments);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
String line = in.readLine();
obj = JSON.parse(line);
in.close();
// java代码中的process.waitFor()返回值为0表示我们调用python脚本成功,
// 返回值为1表示调用python脚本失败,这和我们通常意义上见到的0与1定义正好相反
// int re = process.waitFor();
// System.out.println(re);
} catch (IOException e) {
LoggerUtil.error(PythonUtils.class, "Python数据获取异常:", e.getMessage());
}
return obj;
}
/**
* 获取Python返回数据</br>
* </br>
* 传入参数:dataList[0]=默认为python,就是python执行的函数</br>
* 传入参数:dateList[1]=python脚本执行的位置,示例:D:/FileDate/Python/test_p2.py</br>
* 传入参数:dateList[2]=python脚本接受参数,第一个</br>
* 传入参数:dateList[3]=python脚本接受参数,第二个</br>
* 传入参数:dateList[...]=python脚本接受参数,第...个,注意传入顺序</br>
* @param dateList
* @return
*/
public static PythonToVo getKettlePyData(List<String> dateList) {
// 创建返回参数
PythonToVo ptv = null;
try {
String[] arguments = new String[dateList.size()];
dateList.toArray(arguments);
Process process = Runtime.getRuntime().exec(arguments);
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(), "GBK"));
String line = in.readLine();
JSONObject jsonObject = JSONObject.fromObject(line);
ptv = (PythonToVo) JSONObject.toBean(jsonObject, PythonToVo.class);
in.close();
// java代码中的process.waitFor()返回值为0表示我们调用python脚本成功,
// 返回值为1表示调用python脚本失败,这和我们通常意义上见到的0与1定义正好相反
// int re = process.waitFor();
// System.out.println(re);
} catch (IOException e) {
LoggerUtil.error(PythonUtils.class, "Python数据获取异常:", e.getMessage());
}
return ptv;
}
}
VO类:
import java.util.List;
/**
* @Title:
* @author Hi
* @since JDK1.8
* @history 2020年01月7日 Hi 新建
*/
public class PythonToVo {
String message;
String status;
List<List<String>> data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<List<String>> getData() {
return data;
}
public void setData(List<List<String>> data) {
this.data = data;
}
@Override
public String toString() {
return "PythonToVo [message=" + message + ", status=" + status + ", data=" + data + "]";
}
}
Controller类:
/**
* 查询Python数据
*
* @param pyPath
* @param dataList
* @return
*/
@RequestMapping(value = "/queryPyData", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public Object selectCyanobacteriaWeeklyData(String pyPath, String dataString) {
List<String> countList = new ArrayList<String>();
countList.add("\"python\"");
countList.add(pyPath);
countList.addAll(Arrays.asList(dataString));
Object obj = PythonUtils.getPyData(countList);
return obj;
}
文章评论