python可嵌入,python语言可以扩展和嵌入吗
一、JPype简述
1、JPype是什么?
JPype是一个让python代码方便调用Java代码的工具,从而克服了python在某些领域的不足(比如服务器端编程)。
2、JPype与Jython(JPython后继者)的区别?
(1)运行环境不同:jython运行在jvm上,而JPype的实际运行环境仍然是python runtime,只是在运行过程中启动了一个嵌入式JVM;
(2)用户不同:jython是针对java程序,JPype是针对python程序员。
二、JPype安装
1.首先安装Python2.7和JAVA1.6。
2.安装JPYPE-0.5.4.2.Win32-py2.7.exe(http://SourceForge.net/projects/JPYPE/files/JPYPE/0.5.4/)
3.Ubuntu12.04安装命令:sudo apt-get install python-jpype
三、JPype使用说明
1、启动JVM
JPype提供的startJVM()函数用于启动JAVA虚拟机,所以在调用任何后续的JAVA代码之前,必须调用这个方法来启动JAVA虚拟机。
JPYPE的定义。在启动JVM()
Startjvm (jvm,* args)jpype。startjvm()的参数
1: JVM,描述jvm.dll文件在你系统中的路径,比如“c : \ Program Files \ IBM \ Java 50 \ JRE \ Bin \ J9VM \ JVM . dll”。您可以通过调用jpype.getDefaultJVMPath()来获得默认的JVM路径。
参数2: args,可选参数,将由JPype直接传递给JVM,作为Java虚拟机的启动参数。这适用于所有合法的JVM启动参数,例如:
-agent lib : libname[=options]
-classpathclasspath
-冗长
辛特2、关闭JVM
当您使用完JVM后,可以通过jpype.shutdownJVM()关闭JVM,它没有输入参数。当python程序退出时,JVM将自动关闭。
3、引用第三方Java扩展包
很多时候需要调用python项目中的第三方Java扩展包,这也是JPype的一个重要用途。
通过添加JVM启动参数:-DJ ava . class . path=ext _ class path,可以用python代码调用现有的java扩展包。
4、访问JAVA的系统属性
有时候,一些Java应用程序需要在JVM中设置或获取系统属性。
JVM启动时设置系统变量的示例:
将以下参数添加到JVM的启动参数中:
-d property=四、举例值
>1、直接调用JAVA API
fromjpypeimport*2、调用JAVA第三方扩展包importos.path
startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea")
java.lang.System.out.println("helloWorld")
shutdownJVM()
(1)JAVA自定义第三方jar包:将JpypeDemo类打包为jpypedemo.jar文件并存储到F:/sample_Py目录下
packagejpype;(2)Python调用第三方JAVA jar包程序
publicclassJpypeDemo{
publicStringsayHello(Stringuser){
return"hello"+user;
}
publicintcalc(inta,intb){
returna+b;
}
}
fromjpypeimport*3、访问JAVA的系统属性importos.path
jarpath=os.path.join(os.path.abspath('.'),'F:/sample_Py/')
startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea","-Djava.class.path=%s"%(jarpath+'jpypedemo.jar'))
#ubuntu中startJVM("/home/geek/Android/jdk1.6.0_43/jre/lib/i386/server/libjvm.so","-ea","-Djava.class.path=%s"%
(jarpath+'XXX.jar'))
JDClass=JClass("jpype.JpypeDemo")
jd=JDClass()
#jd=JPackage("jpype").JpypeDemo()#两种创建jd的方法
jprint=java.lang.System.out.println
jprint(jd.sayHello("waw"))
jprint(jd.calc(2,4))
shutdownJVM()
假设你要设置的属性名为 yourProperty,属性值为 yourValue 。
(1)JVM启动时设置系统变量示例
importjpype(2)在程序中设置系统变量示例jvmPath=jpype.getDefaultJVMPath()
jvmArg=“-DyourProperty=yourValue”
ifnotjpype.isJVMStarted():
jpype.startJVM(jvmPath,jvmArg)
importjpype(3)在程序中获取系统变量示例prop=“yourProperty”
value=“yourValue”
system=jpype.JClass('java.lang.System')
system.setProperty(str(prop),str(value))
importjpype盛行IT软件开发工作室,免费的在线学习python平台,欢迎关注!prop=“yourProperty”
system=jpype.JClass('java.lang.System')
value=system.getProperty(str(prop))
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。