java调用python脚本

java调用python脚本

背景介绍

因为后台服务器是java写的(别人写的),但是图像处理算法用python写的(我写的),为了解决调用问题,自己研究从无到有。一开始从网上搜到了用Jython,但是发现Jython已经好久不更新,打包后的jar又不支持import模块(可能是我没搞懂),展展转转找到现在的方法。

目前在win10操作系统上调用成功,后续会在Linux上运行,方法差不多。

java、python环境安装

首先,我们是想在java里调用python脚本,java平台是肯定要安装的,这个不多说。
然后,需要安装python环境,因为java调用python运行脚本是相当于在cmd里来运行python的(Linux相当于在shell里),为了不产生麻烦,或者找不到模块,最好是安装原生python(我系统是安装了anaconda,安装了python,不过依然安装了原生python),原生python去这里下载:https://www.python.org/ (官方),选择自己系统需要的版本,只有几十M大小。
然后需要安装所需要的模块,也就是你python脚本里import的模块,这里打开电脑的cmd(win+r并输入cmd),我需要的是opencv模块,输入:pip install opencv-python,就会安装了,需要别的模块操作相似,怎么输入自行百度。
至此,python环境安装好了,下面就是java里面的代码参考博客:java调用python脚本并向python脚本传递参数
我直接贴出来原文代码例子

1、python脚本内容

import numpy as np
from selenium import webdriver
def main():
    url = 'https://www.tianyancha.com/login'
    driver = webdriver.Chrome()
    driver.get(url)
if __name__ == '__main__':
    a = np.ones(3)
    print(a)
    print('java 调用有第三方库的python脚本成功')
    main()

2、MyDemo类的代码(java调用python脚本)

package test;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class MyDemo {
     
    public static void main(String[] args) {
        try {
           System.out.println("start");
           String[] args1=new String[]{"python","D:\\pyworkpeace\\9_30_1.py"};
           Process pr=Runtime.getRuntime().exec(args1);
            
           BufferedReader in = new BufferedReader(new InputStreamReader(
             pr.getInputStream()));
           String line;
           while ((line = in.readLine()) != null) {
            System.out.println(line);
           }
           in.close();
           pr.waitFor();
           System.out.println("end");
          } catch (Exception e) {
           e.printStackTrace();
          }}
    public void test(){
        System.out.println("我的第一个方法C");
    }
 
}

细节注意

java调用python的关键两句就是这里:

String[] args1=new String[]{"python","D:\\pyworkpeace\\9_30_1.py"};
Process pr=Runtime.getRuntime().exec(args1);

这里首先是调用“python”,然后传给python脚本路径,这里要注意,如果报错找不到python这个应用,这说明只给一个名字是不够的的,这时候把python的完整路径给它就行了。如下(根据自己实际路径修改):

String[] args1=new String[]{"C:\\Users\\Administrator\\AppData\\Local\\Programs\\Python\\Python37\\python.exe","D:\\pyworkpeace\\9_30_1.py"};
Process pr=Runtime.getRuntime().exec(args1);
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值