`
michael_paul
  • 浏览: 170040 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

python调用Java-JPype使用介绍(一)(转)

阅读更多
转自:http://www.ibm.com/developerworks/cn/opensource/os-cn-jpype/index.html
Python 作为一种灵活的软件开发语言在当今被广泛使用。在软件开发过程中,有时需要在 Python 项目中利用既有的 Java 代码,已达到节省时间和开发成本的目的。因此,找到一个 Python 代码调用 Java 代码的桥梁是非常有意义的。 JPype 就是这样的一个工具,利用它可以使 Python 程序方便的调用 Java 代码,从而扩充 Python 语言的能力,弥补 Python 语言的不足。本文介绍了如何利用 JPype 整合 Python 程序和 Java 程序的一些基本方法。

概览

JPype 是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。

下载

JPype 可以从 sourceforge 网站上下载:http://sourceforge.net/projects/jpype/ 目前 JPype 最新的版本为 0.5.4,支持 python 2.5 和 2.6. 本文以 Windows XP 平台,python 2.5.4 为例阐述。

安装

安装 JPype 前需要先安装 python 。从 http://www.python.org/download 下载 python 并安装,安装路径选择 C:\Python25\,安装完成后在本地 C 盘应有 C:\Python25 目录,该目录下有 python.exe 文件。 Python 安装完后,双击下载的 JPype 安装文件即可安装 JPype 。

许可证

JPype 遵循的许可证是 Apache License V2.0 。



JPype 的使用

一个简单的 hello world 程序

下面是一个简单的 python 程序,通过 JPype 调用 Java 的打印函数,打印出字符串。

清单 1. hello world

import jpype
jvmPath = jpype.getDefaultJVMPath()
jpype.startJVM(jvmPath)
jpype.java.lang.System.out.println( “ hello world! ” )
jpype.shutdownJVM()


启动 JVM

JPype 提供的 startJVM() 函数的作用是启动 JAVA 虚拟机,所以在后续的任何 JAVA 代码被调用前,必须先调用此方法启动 JAVA 虚拟机。

    jpype.startJVM() 的定义

    startJVM(jvm, *args)

    jpype.startJVM() 的参数

    参数 1: jvm, 描述你系统中 jvm.dll 文件所在的路径,如“ C:\Program Files\IBM\Java50\jre\bin\j9vm\jvm.dll ”。可以通过调用 jpype.getDefaultJVMPath() 得到默认的 JVM 路径。

    参数 2: args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动参数。此处适合所有合法的 JVM 启动参数,例如:

    -agentlib:libname[=options]
     -classpath classpath
     -verbose
     -Xint



清单 2. jpype.startJVM() 的用法示例

import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -Xint ”
jpype.startJVM(jvmPath,jvmArg)


判断 JVM 是否启动

JPype 提供的 jpype.isJVMStarted() 函数的作用是判断 JVM 是否已启动。

    jpype.isJVMStarted() 的定义
    isJVMStarted()
    jpype.isJVMStarted() 的返回值
    返回值为 True 表示 JVM 已经启动,返回值为 False 表示 JVM 还未启动


清单 3. jpype.isJVMStarted() 的用法示例

import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -Xint ”
if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath,jvmArg)


关闭 JVM

当使用完 JVM 后,可以通过 jpype.shutdownJVM() 来关闭 JVM,该函数没有输入参数。当 python 程序退出时,JVM 会自动关闭。

引用第三方的 Java 扩展包

很多时候,在 python 项目中需要调用第三方的 Java 扩展包,这也是 JPype 的一个重要用途。为了使编程者方便地在 python 代码中调用已有的 Java 扩展包,我们可以再在 JVM 启动参数增加:

-Djava.class.path=ext_classpath

以下为调用第三方 Java 扩展包示例,(假设第三方 Java 扩展包的所在路径是 E:\JavaExt)

清单 4. 调用第三方 Java 扩展包示例

import jpype
jvmPath = jpype.getDefaultJVMPath()
ext_classpath = “ E:\\JavaExt ”
jvmArg = “ -Djava.class.path = ” + ext_classpath
if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath, jvmArg)


访问 Java 的系统属性

有时,某些 Java 应用需要设置或者获取 JVM 中的系统属性。

    在 JVM 启动时设置系统变量示例:
    在 JVM 的启动参数中加入如下参数:
    -Dproperty=value
    假设你要设置的属性名为 yourProperty,属性值为 yourValue 。


清单 5. JVM 启动时设置系统变量示例

import jpype
jvmPath = jpype.getDefaultJVMPath()
jvmArg = “ -DyourProperty=yourValue ”
if not jpype.isJVMStarted():
    jpype.startJVM(jvmPath,jvmArg)



清单 6. 在程序中设置系统变量示例

import jpype
prop = “ yourProperty ”
value = “ yourValue ”
system = jpype.JClass('java.lang.System')
system.setProperty(str(prop),str(value))



清单 7. 在程序中获取系统变量示例

import jpype
prop = “ yourProperty ”
system = jpype.JClass('java.lang.System')
value = system.getProperty(str(prop))


Java 类型到 python 类型的转换

表 1. Java 类型到 python 类型的转换
Java 类型 转换成的 python 类型
byte, short and int int
long long
float and double float
boolean int of value 1 or 0
char unicode of length 1
String unicode
arrays JArray
other Java object JavaObject
Class JavaClass
array Class JavaArrayClass
分享到:
评论

相关推荐

    Python 调用Java实例详解

    Python 调用Java实例详解 前言: Python 对服务器端编程不如Java 所以这方面可能要调用Java代码 前提: Linux 环境  1 安装 jpype1 安装后测试代码:  from jpype import * startJVM(getDefaultJVMPath(), "-ea...

    python 利用 jpype 调用java代码

    python 利用 jpype 调用java代码

    python如何调用java类

    由于 python 本身为脚本语言,且经常存在调用第三方库的情况,有的时候用 java 调用 python 不如用 python 调用 java 方便。下面就整理一下在 python 调用 java 过程中需要哪些操作。(默认是 linux 的 Ubuntu 上调...

    JPype实现在python中调用JAVA的实例

    JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。 2.JPype与Jython(JPython后继者)的区别? 1)运行环境不同:jython运行在jvm上,而JPype的...

    JPype最新版 使用于py2.7

    JPype最新版,使用于py2.7,主要用于phthon调用JAVA

    python调用java模块SmartXLS和jpype修改excel文件的方法

    主要介绍了python调用java模块SmartXLS和jpype修改excel文件的方法,涉及Python调用java模块的相关技巧,非常具有实用价值,需要的朋友可以参考下

    jpype for python 2.4

    python 调用 java 类

    JPype-0.5.4.2.win32-py2.6.

    python调用java所需的工具

    python调用java的jar包方法

    from jpype import * jvmPath = getDefaultJVMPath() jars = ["./Firstmaven-1.0-SNAPSHOT-jar-with-dependencies.jar"] jvm_cp = "-Djava.class.path={}".format(":".join(jars)) startJVM(jvmPath,jvm_cp) ...

    JPype 2.7 安装包(windows 平台下)- 下调积分

    jpype主要用于python程序调用Java程序。这里主要是jpype2.7 ,里面还有一个python的安装包。之前遇到一些问题,安装这两个可以解决

    Python调用jar包方法实现过程解析

    因为写脚本经常会需要使用,而经过各种尝试,比如jpype等,都不尽如人意。最后转换思路找到了一种好方法: 1. 将java项目打成jar包; 2. 设定jar包的Main-class属性; 3. 在python中通过subprocess执行jar包。 修改...

    jpype-0.6.3

    JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足。

    Python RocketMQ

    python调用java访问RocketMQ,兼容python2和python3。 请安装jpype1

    Python使用jpype模块调用jar包过程解析

    能够让 python 代码方便地调用 Java 代码的工具 二、jpype模块安装 安装和其它模块没区别,但是注意模块名 是 jpype1 ,后面有个1 pip install jpype1 三、jpype模块应用(macOs下) 笔者在标题里面备注了所使用...

    rocketmq-client.zip

    python调用java访问RocketMQ,兼容python2和python3。 请安装jpype1

    python如何使用jt400.jar包代码实例

    这篇文章主要介绍了python如何使用jt400.jar包代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 jt400helper.py #coding=utf-8 import jpype ...

    meetup_crawler:用于 EBSN Meetup 的基于 Python 的爬虫

    要运行爬虫,只需调用python crawl.py 。 要查看所有配置功能,请调用python crawl.py --help 。 支持的数据库系统: SAP HANA 要求: jaydebeapi ( pip install jaydebeapi ) JPype(请参阅下面的说明) 在 Mac...

    phagea:基于噬菌体的进化算法

    噬菌体 基于噬菌体的进化算法 用Java编写,但可通过jPype从python调用

Global site tag (gtag.js) - Google Analytics