因为在做一个ssh的项目,需要用python进行数据分析并取回结果,所以想在java中调用一下python,方法是找到了,但是当网站运行的时候,不可避免的是调用运行的太慢了,基本无法满足用户交互的需求,所以一般不建议在java中调用python。
另外,由于在java代码的编译环境,一般是idea中无法显示python的编译对错,所以建议先把python代码在命令行模式(cmd)里面跑一下,能正确输出结果了再在java中调用。
如果python使用的是pycharm开发环境的话,使用的python库可能会有差别,建议在import中导入site-packages,这样就能使用当前的库了。
import sys
sys.path.append('C:\\Users\\Administrator\\PycharmProjects\\biye\\Lib\\site-packages')
java中代码:
User user = (User) ActionContext.getContext().getSession().get("loginUser");
String uid=String.valueOf(user.getUId());
String[] arguments = new String[] { "python", "C:\\Users\\Administrator\\PycharmProjects\\biye\\test9.py", uid};
try {
//执行命令调用程序
Process process = Runtime.getRuntime().exec(arguments);
//取得命令结果的输出流,用一个读输出流类去读,用缓冲器读行
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
in.close();
//调用Process.waitFor()来等待命令执行结束,获取执行结果
int re = process.waitFor();
System.out.println(re);
//抛出异常
} catch (Exception e) {
e.printStackTrace();
}
python中代码:
if __name__ == '__main__':
id=sys.argv[1]
#传递过来一般是字符串,想要int要进行格式转换
id=int(id)
#利用print就能把数据传回去了,到java在进行处理
print(id)