APP+JAVA+Python项目整合实践教程

本文详细介绍如何在Java应用中调用Python脚本,包括Runtime.getRuntime().exec方法的使用,不同Python版本在Linux与Windows服务器上的配置,以及实际案例中的整合步骤。适合初学者了解两者间集成的实践指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

近期正在自制一个APP,里边需要用到python爬取一些信息,同时也是为了实践和巩固自己学到的知识点。而且我发现网上写java和python整合的文章比较少。所以就打算写一篇文章来给袍泽们做一个借鉴。

一、先自己准备一个搭建好的java项目

二、java调用python全部代码

java代码如下:

三、解释Process proc = Runtime.getRuntime().exec(args);含义

四、python全部代码

总结


​​​​​​​



前言

近期正在自制一个APP,里边需要用到python爬取一些信息,同时也是为了实践和巩固自己学到的知识点。而且我发现网上写java和python整合的文章比较少。所以就打算写一篇文章来给袍泽们做一个借鉴。


一、先自己准备一个搭建好的java项目

我这里是直接用了spring框架然后tomcat+mysql搭建的

二、java调用python全部代码

java代码如下:

@PostMapping("/searchMusic")
    public Object searchMusic(@RequestParam("musicName") String musicName, @RequestParam("musicNumber") String musicNumber, @RequestParam("firstMusicNumber") String firstMusicNumber) throws IOException, InterruptedException {
        StringBuilder stringBuilder = new StringBuilder();
        System.out.println("总共" + musicNumber + "条数据");
        try {
            if (!StringUtils.hasLength(musicName)) {
                return stringBuilder;
            }
            //获取当前项目的路径
            StringBuilder pythonUrl = new StringBuilder();
            pythonUrl.append("/usr/softward/python/Python-3.8.1/pythonProject/getMusic.py");
            String[] args = new String[]{"python3", pythonUrl.toString(), musicName, musicNumber, firstMusicNumber};
            Process proc = Runtime.getRuntime().exec(args);// 执行py文件
            BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream(), "GBK"));
            stringBuilder.append(in.readLine());
            //java代码中的process.waitFor()返回值为0表示我们调用python脚本成功,
            System.out.println(proc.waitFor() == 0 ? "python脚本执行成功" : "python脚本执行失败");
            in.close();
            proc.waitFor();
            Runtime.getRuntime().gc();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(stringBuilder.toString());
        return stringBuilder;
    }

我这里的项目是放在阿里云ECS服务器上边的这边这个路径写绝对路径就行了。

这里我们采用java中

Runtime.getRuntime().exec(args)

在linux中单独开启一个进程,来执行python脚本。这个方法在windows上也是可行的。

其中args这个数组里边的python3是你在进入python中的命令,比如:

 在window中打开cmd命令窗口。输入python会显示已经进去python运行环境中,然后还会显示一个版本号。因为我电脑上只安装了一个3.8版本的python所以我直接就配置了”python“作为进入python运行环境的命令。所以我这里输入”python3“是会显示找不到命令的。

这里先来看下windows下的idea控制台输出的日志:

但是阿里云服务器上是默认安装了几个python版本的,我们来看看吧。

 这里蓝色的文件是linux中的”软链接“,命令中输入软链接名称就会打开对应的文件,跟”别称“差不多。

 

 现在可以看到输入不同命令进入到的是不同的python版本运行环境中。

三、解释Process proc = Runtime.getRuntime().exec(args);含义

String[] args = new String[]{"python", pythonUrl.toString(), musicName, musicNumber, firstMusicNumber};
Process proc = Runtime.getRuntime().exec(args);// 执行py文件

Runtime.getRuntime().exec(args)这里相当于你输入命令,比如:

python /usr/HelloWorld.py   或者

python D://HelloWorld.py

这里不管是linux还是windows都是一样的。

我这里直接放的是数组。要注意的是数组中的元素顺序必须跟你直接敲命令行的顺序是一样的。

然后后面的musicName, musicNumber, firstMusicNumber这里是我python中方法的参数。

下面来看看python中代码是怎么写的吧。

四、python全部代码

# -*- coding: utf-8 -*-
import sys
from nian import *

def func(name,number,firstNumber):
    iarray=[];
    number=int(number)
    firstNumber=int(firstNumber)
    if not niankw(name) is None :
        niankwArray=[niankw(name),name];
        iarray.append(niankwArray);
    for i in range(firstNumber,number):
        if nianqq(name,i,True)[0] !="https://isure.stream.qqmusic.qq.com/":
            iarray.append(nianqq(name,i,True))
    return iarray;

if __name__ == '__main__':
    a = []
    for i in range(1, len(sys.argv)):
        a.append((str(sys.argv[i])))
    print(func(a[0],a[1],a[2]))

 这里直接就是一个python文件,你python是怎么写的这里就是怎么写的。java只是帮你调用了一下这个python文件而已。省去了你敲python命令行的步骤。

我这里在python中的main方法中循环了一下系统参数,也就是"sys.argv"这个数组,这个数组是java那边通过Runtime.getRuntime().exec(args)传过来的。

到这里我想你肯定明白java是怎么调用python脚本的了吧!至于底层怎么实现的话可以去看下Runtime.getRuntime().exec(args)这个方法是怎么实现的。下面展示一下运行后的结果。我这里用的是postman调用接口。

没有安装接口测试工具的小伙伴,可以将java代码中controller层中的

@PostMapping("/searchMusic")

改成

@GetMapping("/searchMusic")

就可以在浏览器中url中调用啦

总结

以上就是java怎么调用python的步骤啦。后续还会持续更新有关各种程序代码的内容哦,请点击关注收藏,各种知识可不能错过哦!

【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于python+springboot的针对Windows Server 2008 R2的基线安全检测系统源码+项目说明.zip # baseline-checker 针对Windows Server 2008 R2的基线安全检测系统,后台使用SpringBoot搭建,客户端用python编写。 客户端扫描主机进行信息收集及基线检查,将结果发送给服务端,服务端在后台进行可视化展示。 ## java-server 后台管理系统使用SpringBoot框架搭建,实现全局异常处理、拦截器、数据校验器等;整合thymeleaf,实现前后端分离;使用Shiro实现RBAC权限管理;使用Mybatis作为持久层框架,使用pageHelper实现分页;前端使用echarts组件进行可视化展示;使用定时任务,定时监听,使用多线程接收不同客户端的数据,将数据处理后存入数据库。 ## py-client 客户端的脚本版本;通过WMI模块、安全配置文件、注册表、运行cmd等收集信息,并与数据库中的规则对比,进行主机的基线核查,使用socket将数据处理并封装后发送给服务端。 ## py-client-gui 客户端的gui版本。 ## 文档 - API接口文档 - 数据字典文档
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值