如何用Python调用java程序
时间:2022-05-07
本文章向大家介绍如何用Python调用java程序,主要内容包括前言、JPype简述、安装、调用标准代码、调用自定义代码、官方手册、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
如何用Python调用java程序
前言
不会java怎么做Java程序的单元测试呢?我想有一种很好的选择就是Python,充分利用Python的胶水语言的特性,你可以做任何语言的单元测试。
当然用Python调用Java有多种方式,本文只介绍一种方式,其他方式请自行查资料学习。
JPype简述
JPype是一个能够让Python代码方便地调用Java代码的库,所以你只需掌握JPype库即可做Java程序的单元测试了。
安装
先安装Python和JDK,然后使用如下命令,安装JPype:
pip install jpype1
安装成功如下图:
调用标准代码
下面演示使用JPype调用Java标准的println函数试试:
# -*- coding:utf-8 -*-
__author__ = "苦叶子"
"""
关注微信公众号:开源优测
获取更多关于开源技术在测试工作中的应用实践
"""
from jpype import *
if __name__ == "__main__":
# 启动java虚拟机
startJVM(getDefaultJVMPath(), "-ea")
# 调用println函数
java.lang.System.out.println("hello python java")
# 关闭虚拟机
shutdownJVM()
执行上述代码,结果如下:
调用自定义代码
下面我们演示如何使用Python JPype来调用我们自己写的Java程序:
public class JPypeDemo{
public String say(String user){
return "[开源优测]说: " + user;
}
public int calc(int a, int b){
return a + b;
}}
将上述java代码保持至JPypeDemo.java中,使用下列命令,将上述代码编译成jar文件
编译java程序
javac JPypeDemo.java
打包成jar文件
jar cvf JPypeDemo.jar JPypeDemo.class
写我们的python调用代码如下:
# -*- coding:utf-8 -*-
__author__ = "苦叶子"
"""
关注微信公众号:开源优测
获取更多关于开源技术在测试工作中的应用实践
"""
from jpype import *
import os
if __name__ == "__main__":
# 启动java虚拟机
# 注意使用了-D选项指定了jar的目标位置
startJVM(getDefaultJVMPath(), "-ea",
"-Djava.class.path=%s" % (os.getcwd() + "/JPypeDemo.jar"))
# 加载自定义的java class
JDClass = JClass("JPypeDemo")
jd = JDClass()
# 获取java标准库打印函数
jprint = java.lang.System.out.println
# 调用自定义class中的函数,并输出返回值
jprint(jd.say("deeptest"))
jprint(jd.calc(1, 4))
# 关闭虚拟机
shutdownJVM()
将上述python代码保存至python_call_java.py中,并和JPypeDemo.jar(实际操作中你可以将jar放在任意目录,只要在启动jvm时指定待调用jar的路径即可)
整个执行过程和结果如下图:
官方手册
http://jpype.readthedocs.io/en/latest/userguide.html#
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 教你如何设置宝塔面板 Brotli压缩
- Message: session not created: This version of ChromeDriver only supports Chrome version 83
- 宝塔BT面板 设置开启TLSV1.3
- 02 复杂度分析_pythoner学习数据结构与算法系列
- 修改Mysql数据库的数据存储位置
- 使用Caddy搭建TLS1.3+HTTP2代理
- 一文带你了解Python爬虫(一)——基本原理介绍
- 关于修改window.navigator.webdriver代码失效问题
- 一文带你了解Python爬虫(二)——四种常见基础爬虫方法介绍
- 当 snapshot 失败时发生了什么
- python 文件管理神器os.walk-文件指定日期整理程序
- 项目驱动-两日速成Docker日记
- python os模块 --- 操作系统接口模块
- 自动采集各种美女图片站并下载图和自动搭建图片站
- 修改其他函数的功能的神器——python装饰器