Python的JAVA胶水——jpype

python可以作为一门胶水语言使用,可以用其它语言的优势来弥补自身如性能方面的不足,jpype就是在Python中使用jvm的第三方库

文档在这里

安装

sudo pip jpype1 #注意后面有一个1,参考官网

配置安装JAVA环境本文就不再赘述

helloworld

  • 设置参数启动JAVA虚拟机
  • 运行JAVA代码
  • 关闭虚拟机
#coding=utf=8

import jpype

jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
jpype.startJVM(jvmpath=jvmPath) # 启动虚拟机
# 执行JAVA代码
jpype.java.lang.System.out.println("hello world")
jpype.shutdownJVM() # 关闭jvm -------------------------------------------
hello world
JVM activity report :
classes loaded : 31
JVM has been shutdown

使用Java中的对象

jpype还支持直接使用编译后的class文件,省去了编译这一环节。

一下是原来的JAVA测试代码

package com;
public class JavaClass
{
String value;
public JavaClass(String value)
{
this.value = value+" Java";
}
public String getValue()
{
return this.value;
}
public void say()
{
System.out.println("hello java");
}
public static void main(String[] args) {
System.out.println("hello world");
}
}

编译后产生JAVA字节码

java -cp com  com.JavaClass

现在的文件结构如下

./

├── com

│   └── JavaClass.class

└── testJava.py

Python代码如下:

#coding=utf=8

import jpype

jvmPath = jpype.getDefaultJVMPath() # 获得系统的jvm路径
# 启动虚拟机
if not jpype.isJVMStarted():
jpype.startJVM(jvm=jvmPath)
# 使用JAVA字节码中定义的类
javaClass = jpype.JClass('com.JavaClass')
# 实例化对象
javaInstance = javaClass('test')
#调用JAVA对象的方法
print javaInstance.getValue()
javaInstance.say() # 关闭jvm
jpype.shutdownJVM() -------------------------------------------
test Java
hello java
JVM activity report :
classes loaded : 20
JVM has been shutdown

添加jar包

原TestApi.java代码

package test;  

public class TestApi
{
public String getData(String key){
return key;
}
public void printData(String key){
System.out.println(key);
} public static void main(String[] args)
{
System.out.println(123);
}
}

打包成jar后可以使用Python来调用

#coding=utf-8

import jpype

jvmPath = jpype.getDefaultJVMPath()

# 用来添加JAVA虚拟机命令行参数
ext_classpath = './TestApi.jar'
jvmArg = '-Djava.class.path=' + ext_classpath if not jpype.isJVMStarted():
jpype.startJVM(jvmPath, jvmArg)
TA = jpype.JPackage('test').TestApi #这种用法可以简化后面的书写
jd = TA()
jd.printData('1234')
s = jd.getData('a')
print s
system = jpype.java.lang.System #这里也是获得了System
system.out.println("call system method")
jpype.shutdownJVM()

此例中,同时还使用了JAVA虚拟机启动时的命令行参数,可以订制启动方式

小结

jpype提供了强大而灵活的JAVA虚拟机接口,使得Python的扩展性进一步提升,Python的优雅语法,配上JAVA的工程化性能,可以使开发更加高效。

Python的JAVA胶水——jpype的更多相关文章

  1. python调用java程序--jpype

    官方网站:http://jpype.sourceforge.net/ 官方使用文档:http://jpype.sourceforge.net/doc/user-guide/userguide.html ...

  2. python的java胶水(jpype1)

    1.直接使用pip安装jpype1 命令 pip install jpype1 但是,很不幸,提示报错,缺少VC++组件. 2.使用其他方法安装 在  https://www.lfd.uci.edu/ ...

  3. 使用 jpype 库实现 Python 调用 java 的 jar 包中的功能

    一.what's the JPype JPype 是一个能够让 python 代码方便地调用 Java 代码的工具.在某些时候 java 的能力更强,我们可以用 java 写一个模块的功能然后用 Py ...

  4. python 调 java(胶水就是胶水)

    java门外汉用python调java, 一.安装java环境(linux) 1.首先要去下载好JDK,Java SE 8的官方网址是http://www.oracle.com/technetwork ...

  5. python - jpype模块,python调用java的接口

    转载自: http://www.cnblogs.com/junrong624/p/5278457.html https://www.cnblogs.com/fanghao/p/7745356.html ...

  6. python 调用java脚本的加密(没试过,先记录在此)

    http://lemfix.com/topics/344 前言 自动化测试应用越来越多了,尤其是接口自动化测试. 在接口测试数据传递方面,很多公司都会选择对请求数据进行加密处理. 而目前为主,大部分公 ...

  7. 比Python、Java更快的 Go 语言,能否称霸江湖?

    关注之后加星标,江湖要事早知道 ​ 文章来源:jb51.net 有一种语言堪称比语言排行榜前五热门选手的Python.Java更快,它就是GO语言. Go于2009年11月正式宣布推出,成为开放源代码 ...

  8. Python调用Java代码部署及初步使用

    Python调用Java代码部署: jpype下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#jpype 下载的时候需要使用Chrome浏览器进行下载 ...

  9. python调用Java代码,完毕JBPM工作流application

    1.缘由 有一庞大Python django webproject,要引入工作流引擎,像OA一样.方便的流程控制与管理.Python或django关于工作流的开源插件,稀少,并且弱爆了,终于选用jav ...

随机推荐

  1. 【bzoj3717】[PA2014]Pakowanie 状压dp

    题解: 自己在这一类问题上想到的总是3^n的枚举法 首先背包从大到小排序 f[i]表示搞出为i的状态至少要用几个背包,g[i]表示最大剩余容量 这样就可以2^n*n 因为这么做利用了状态之间的先后顺序 ...

  2. nginx做代理安装docker

    1.环境 服务器IP 服务用途 是否能 联网 192.168.126.128 docker服务器(简称B服务器) 不能 192.168.126.130 nginx服务器(简称A服务器) 能 2.背景 ...

  3. 配置文件——节点<machineKey>的作用,强随机生成

    <machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥.ASP.NET自动使用它来保护表单验证Cookie,你也可以将它用于受保护的视图状态数据.同时,这个密 ...

  4. Coolpy开源项目简介

    1.Coolpy初识 基于ARDUINO的迷你操作系统.只需一个ARDUINO主板+Ethernet Shield即可运行.成本低,Coolpy主件以目前淘宝价只需要76元人民币. 2.Coolpy能 ...

  5. 分布式一致性算法——paxos

    一.什么是paxos算法 Paxos 算法是分布式一致性算法用来解决一个分布式系统如何就某个值(决议)达成一致的问题. 人们在理解paxos算法是会遇到一些困境,那么接下来,我们带着以下几个问题来学习 ...

  6. Python面向对象2-类和构造方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-08-05 # O ...

  7. java读取配置文件方法以及工具类

    第一种方式 : java工具类读取配置文件工具类 只是案例代码  抓取异常以后的代码自己处理 import java.io.FileNotFoundException; import java.io. ...

  8. 浏览器 User-Agent 大全

    一.基础知识 Http Header之User-Agent User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA.它是一个特殊字符串头,是 ...

  9. 《Thinking In Java》阅读笔记

    <Thinking In Java>阅读笔记 前四章:对象导论. 一切都是对象. 操作符. 控制执行流程 public在一个文件中只能有一个,可以是一个类class或者一个接口interf ...

  10. RF:RF实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性—Jason niu

    %RF:RF实现根据乳腺肿瘤特征向量高精度(better)预测肿瘤的是恶性还是良性 load data.mat a = randperm(569); Train = data(a(1:500),:); ...