当前位置:首页 » 编程语言 » python调用java类

python调用java类

发布时间: 2023-01-24 11:33:30

‘壹’ 怎么在java的flink中调用python程序

一、在java类中直接执行python语句

import org.python.util.PythonInterpreter;
public class FirstJavaScript {
public static void main(String args[]) {

PythonInterpreter interpreter = new PythonInterpreter();

interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); ");
interpreter.exec("print days[1];");

}// main
}

调用的结果是Tue,在控制台显示出来,这是直接进行调用的。

二、在java中调用本机python脚本中的函数

首先建立一个python脚本,名字为:my_utils.py

def adder(a, b):
return a + b
然后建立一个java类,用来测试,

java类代码 FirstJavaScript:

import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class FirstJavaScript {
public static void main(String args[]) {

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:\\Python27\\programs\\my_utils.py");
PyFunction func = (PyFunction) interpreter.get("adder",
PyFunction.class);

int a = 2010, b = 2;
PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b));
System.out.println("anwser = " + pyobj.toString());

}// main
}

得到的结果是:anwser = 2012

三、使用java直接执行python脚本

建立脚本inputpy

#open files

print 'hello'
number=[3,5,2,0,6]
print number
number.sort()
print number
number.append(0)
print number
print number.count(0)
print number.index(5)

建立java类,调用这个脚本:

import org.python.util.PythonInterpreter;

public class FirstJavaScript {
public static void main(String args[]) {

PythonInterpreter interpreter = new PythonInterpreter();
interpreter.execfile("C:\\Python27\\programs\\input.py");
}// main
}

得到的结果是:
hello
[3, 5, 2, 0, 6]
[0, 2, 3, 5, 6]
[0, 2, 3, 5, 6, 0]
2
3

‘贰’ python 怎么把一个类传递给JAVA,然后Java调用python类的回调函数

走api啊,标准json传输,然后分别处理被

‘叁’ Python能不能调用jar包

Python是不能直接调用jar包的,但是通常都以Jython调用jar包作为一种很好的解决方式。
ython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。
ython由于继承了Java和Python二者的特性而显得很独特。其可以对Java类的无缝存取。
在Java中实现Python可以看到有趣的Java反射API的作用。反射使Jython能无缝地使用任何Java类。Jython从CPython中继承了很多优点,但CPython不像别的专为Python所写的一样,在C和Python之间有一些问题限制了C库函数的使用。在Jython中真正解决了这个问题,使其编程的效率和生产力得到了很大的提高。
由于与Java的无缝集成,Jython能使任何部署了Java应用和框架的公司受益而不需要额外的工作。接受任何一种部门的编程语言,对任何一个公司而言都是不容易的,需要深思熟虑,因为这牵涉到整体结构、服务器和外围的工具。Jython作为Java的一个无缝集成的语言,可以在已存在的Java应用上无缝增加而不需要重大抉择。很多公司都花费了很多资金来建立Java的应用,这使采用CPython、Perl、Ruby、PHP和其他不能透明地集成已有Java实现的高级语言的效益降低,吸引力下降。而Jython有能力对已存在的Java框架进行补充,且二者能无缝地结合。

‘肆’ python调用的java进程在哪看

python调用的java进程在哪看?
最近在做基于python的locust压力测试,api接口程序是java版本,导致python无法匹配签名模式,需要python调用java的签名程序。

首先需要按照python依赖包

pip install jpype1
jpype调用jar包

jpype的原理是在python进程中嵌入了java虚拟机,并与虚拟机进行通信。

复制代码
import jpype
# 如果只有java程序,那需要先打成一个jar包来给python引用 ,有java.jar就可以直接使用
def init_jvm():
jpype.startJVM(jpype.getDefaultJVMPath(), "-ea", "-Djava.class.path=%s" % 'java.jar')

def getsign(privateKey,publicKey):

VerCls = jpype.JClass("com.sign") # 引用的java包与类名
sign = VerCls().getSign(privateKey,publicKey)

return sign
def shutdowm():
try:
jpype.shutdownJVM()
except:
pass

if __name__=="__main__":
init_jvm()
print(getsign("priyyyy","alpha1234"))
shutdowm()
复制代码
代码说明如下:

需要提供java.jar,如果只有java程序,那需要先打成一个jar包来给python引
init_jvm函数中的 jpype.startJVM用来启动java虚拟机,-Djava.class.path 用来指定我们要调用的jar包。
在getsign中,jpype.JClass用来引用sign类,通过实例化并调用getSign实现版本号的比较。
jpype.shutdownJVM()是主动关闭java虚拟机,释放资源。

‘伍’ python 调用java 是每一次都启动jvm吗

是的

一、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.startJVM() 的定义

    startJVM(jvm, *args)

  • jpype.startJVM() 的参数

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

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

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

  • 2.关闭JVM

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

    3.引用第三方Java扩展包

    很多时候,在 python 项目中需要调用第三方的 Java 扩展包,这也是 JPype 的一个重要用途。

    通过在 JVM 启动参数增加:-Djava.class.path=ext_classpath,实现在 python 代码中调用已有的 Java 扩展包。

    4.访问JAVA的系统属性

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

  • 在 JVM 启动时设置系统变量示例:

  • 在 JVM 的启动参数中加入如下参数:
    -Dproperty=value

  • 四、举例

    1.直接调用JAVA API

    [java]view plain

  • fromjpypeimport*

  • importos.path

  • startJVM("C:/Java/jdk1.6.0_10/jre/bin/client/jvm.dll","-ea")

  • java.lang.System.out.println("helloWorld")

  • shutdownJVM()



  • 2.调用JAVA第三方扩展包

    1)JAVA自定义第三方jar包:将JpypeDemo类打包为jpypedemo.jar文件并存储到F:/sample_Py目录下

    [java]view plain

  • packagejpype;

  • publicclassJpypeDemo{

  • publicStringsayHello(Stringuser){

  • return"hello"+user;

  • }

  • publicintcalc(inta,intb){

  • returna+b;

  • }

  • }



  • 2)Python调用第三方JAVA jar包程序

    [python]view plain

  • fromjpypeimport*

  • 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()



  • 3.访问JAVA的系统属性

    假设你要设置的属性名为 yourProperty,属性值为 yourValue 。

    1)JVM启动时设置系统变量示例

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

    2)在程序中设置系统变量示例

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

    3)在程序中获取系统变量示例

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

‘陆’ python 调用java对象

你使用jython这个解释器就可以让python直接调用java, 调用完成后,你用python封装成一个服务。其它的python程序员就可以间接调用java对象了。

jython调用java这个方式也被eclipse+pydev使用,是目前最直接的方法。

‘柒’ 有没有从Python调用Java的好方法

[java]view plain

  • String[]arg=newString[]{"python",types,parameter};//第一个参数是python解释器位置,第二个参数是执行的python脚本位置,接下来的都是参数

  • Processprocess=Runtime.getRuntime().exec(arg);

  • =newInputStreamReader(process.getInputStream());

  • BufferedReaderbufferedReader=newBufferedReader(inputStreamReader);

  • Stringline="";

  • StringBufferstringBuffer=newStringBuffer();

  • while((line=bufferedReader.readLine())!=null){

  • stringBuffer.append(line);

  • stringBuffer.append(" ");

  • }

  • bufferedReader.close();

  • process.waitFor();

‘捌’ 如何在Python中调用C++代码或Java包中的函数

可以用Python的扩展来实现。可参考Extending Python with C or C++。
Python本来是C实现的,封装二进制兼容的C++是很容易的。
Java的话得通过JNI来实现,就是说在Python扩展里用C调用Java。
另外,你也可以写一个TCP服务来包装C++/Java的接口,通过网络来调用,这样更通用。

热点内容
sql数据库项目 发布:2025-07-20 14:06:11 浏览:162
linux查看selinux状态 发布:2025-07-20 13:36:35 浏览:915
福利资源解压密码 发布:2025-07-20 13:34:10 浏览:270
我的世界怎么在手机搞服务器 发布:2025-07-20 13:26:07 浏览:906
android系统键盘 发布:2025-07-20 13:19:38 浏览:501
程序化交易算法 发布:2025-07-20 13:09:58 浏览:974
已关闭服务器是什么意思 发布:2025-07-20 13:06:49 浏览:710
三星s5密码多少钱 发布:2025-07-20 12:55:14 浏览:962
密码忘记了怎么找回 发布:2025-07-20 12:46:18 浏览:534
华为的密码锁为什么开不了 发布:2025-07-20 12:45:35 浏览:133