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

jython调用python

发布时间: 2023-08-07 18:18:18

java怎么用jython调用python

args, 为可选参数,会被 JPype 直接传递给 JVM 作为 Java 虚拟机的启动百参数。此处适合所有合法的度 JVM 启动参数,例如:
-agentlib:libname[=options]
-classpath classpath
-verbose
-Xint

㈡ jython 如何使用 Python 的类库

Python的代码可以用Jython运行,只要没有用到扩展库。 因为Jython实现了一个Python解析器,可以解析执行Python的代码。 Jython在import 一个Python文件的时候,会编译生成.class文件,而不是.pyc文件。 这些.class文件就是普通的Java Class,只不过调用了Jython VM. Jython的限制是无法使用用C写的Python扩展库,因为没有在ABI层兼容CPython。

㈢ jython和python的区别是什么

我们通常意义上说的python是cpython,也就是完全用C实现的python,它支持C的扩展,不支持java什么的扩展。
jython是完全用jython实现的python,它支持用java扩展,貌似无法用C扩展。
相关推荐:《python培训视频》
jython用途比较少。主要在两个场景下:
1、操作系统不提供cpython, 只有JAVA可以用。比如sun工作站,或者是某些嵌入式设备。
2、不得不用一些JAVA的包来提供功能。所以只能用jython来调用JAR包。
jython因为有java的即时编译器和编译优化效果,所有速度还是不错的。
不过jython的总体来讲,支持包不够多。不象是cpython 2.7那样,几乎所有的包都支持。极其丰富。不过纯python的包都可以在jython上安装使用。
jython的版本号通常比cpython的要低。不过现在到了2.7也基本上持平了。流行的jython就是2.5,2.7两个版本。
另外jython似乎对于GIL处理的更好些。所以原则上讲,并发性能更好。所以jython的线程应该会比cpython的线程更强大。可以更好的利用到java的性能,把CPU的各个核都用上。
另外内存的使用上,按理jython也可以利用到java的一些优点。cpython通常字典超 过2GB内存就会很慢。也许jython要好些。
总体来讲,性能上还是cpython要更快些。最快的是pypy,其次是cython, 再次是cpython, jython应该在后面。

㈣ 用java 调用python webservice 是怎么调的

这次出差,我接触最多的是spss,由于项目基于j2ee开发,而java又不能直接取得spss统计结果,好在spss对python的支持还行,最终成功实现了这个模块。感谢前辈们做出的贡献,没有你们,我就不能这样迅速、顺利的完成项目,且别说写这篇文章了。
在前期准备中,我摸索、尝试了三种实现:jython,http,soap,在网上查了很多相关资料,都是只言片语,自己看了还要结合其他的资料才能弄个明白。当然,在这探索的过程中,我是幸运的,每天都让我充满惊喜,每天都有新的收获。
jython是java版本的python,也就是java的完全实现。java代码中,可以调用python的方法,缺点是,jython中导入第三方python mole时,不是那么回事。因为spss的python api主要是一个.pyd的二进制文件,jython导包是按照java的字节码来导入的,所以当在jython中导入spss的python api时会出错,这个想法彻底破灭。
http实现是在现有的B/S交互实现上突发奇想的,python中实现一个简单的web server只要几十行代码,java使用apache的httpclient访问,现在想来确实有点大材小用,自己写一个http socket来请求和响应也写不了多少代码。最后还是实现了,支持spss中文,但是数据封包都要自己来实现,还是有嫌麻烦。
soap实现最简单,server端几十行代码搞定。由于我把spss命令都封装到一个方法中执行了,所以就没有用wsdl来生成java代码了,我使用了较底层的java的http socket,手动对SOAP-ENV打包,并向server端请求,手动解析响应数据。缺点是:SOAP对中文的支持,无论怎么转码,不是python解析SOAP-ENV报错,就是python执行spss命令报错。

㈤ 怎么使用java运行python脚本

1.直接执行Python脚本代码
引用 org.python包
1 PythonInterpreter interpreter = new PythonInterpreter();
2 interpreter.exec("days=('mod','Tue','Wed','Thu','Fri','Sat','Sun'); "); ///执行python脚本


2. 执行python .py文件
1 PythonInterpreter interpreter = new PythonInterpreter();
2 InputStream filepy = new FileInputStream("D:\\demo.py");
3 interpreter.execfile(filepy); ///执行python py文件
4 filepy.close();


3. 使用Runtime.getRuntime()执行脚本文件
这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No mole named arcpy。
1 Process proc = Runtime.getRuntime().exec("python D:\\demo.py");
2 proc.waitFor();

㈥ java调用python,有第三方包gensim,怎么调用呢,是报错。求教....

Jython(原JPython),是一个用Java语言写的Python解释器。

在没有第三方模块的情况下,通常选择利用Jython来调用Python代码,

它是一个开源的JAR包,你可以到官网下载

一个HelloPython程序

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.exec("print('hello')");

}

}

什么是PythonInterpreter?它的中文意思即是“Python解释器”。我们知道Python程序都是通过解释器来执行的,我们在Java中创建一个“解释器”对象,模拟Python解释器的行为,通过exec("Python语句")直接在JVM中执行Python代码,上面代码的输出结果为:hello

在Jvm中执行Python脚本

interpreter.execfile("D:/labs/mytest/hello.py");

如上,将exec改为execfile就可以了。需要注意的是,这个.py文件不能含有第三方模块,因为这个“Python脚本”最终还是在JVM环境下执行的,如果有第三方模块将会报错:javaImportError:Nomolenamedxxx

仅在Java中调用Python编写的函数

先完成一个hello.py代码:

defhello():

return'Hello'

在Java代码中调用这个函数:

importorg.python.core.PyFunction;

importorg.python.core.PyObject;

importorg.python.util.PythonInterpreter;

publicclassHelloPython{

publicstaticvoidmain(String[]args){

PythonInterpreterinterpreter=newPythonInterpreter();

interpreter.execfile("D:/labs/hello.py");

PyFunctionpyFunction=interpreter.get("hello",PyFunction.class);//第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型

PyObjectpyObject=pyFunction.__call__();//调用函数

System.out.println(pyObject);

}

}

上面的代码执行结果为:Hello

即便只是调用一个函数,也必须先加载这个.py文件,之后再通过Jython包中所定义的类获取、调用这个函数。

如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”,例如:

__call__(newPyInteger(a),newPyInteger(b))

a,b的类型为Java中的int型,还有诸如:PyString(Stringstring)、PyList(Iterator<PyObject>iter)等。

详细可以参考官方的api文档。

包含第三方模块的情况:一个手写识别程序

这是我和舍友合作写的一个小程序,完整代码在这里:

,界面上引用了corejava上的一段代码。Python代码是舍友写的,因为在Python程序中使用了第三方的NumPy模块,导致无法通过Jython执行。下面这个方法纯粹是个人思路,没有深入查资料。核心代码如下:

importjava.io.*;

classPyCaller{

privatestaticfinalStringDATA_SWAP="temp.txt";

privatestaticfinalStringPY_URL=System.getProperty("user.dir")+"\test.py";

(Stringpath){

PrintWriterpw=null;

try{

pw=newPrintWriter(newFileWriter(newFile(DATA_SWAP)));

}catch(IOExceptione){

e.printStackTrace();

}

pw.print(path);

pw.close();

}

publicstaticStringreadAnswer(){

BufferedReaderbr;

Stringanswer=null;

try{

br=newBufferedReader(newFileReader(newFile(DATA_SWAP)));

answer=br.readLine();

}catch(FileNotFoundExceptione){

e.printStackTrace();

}catch(IOExceptione){

e.printStackTrace();

}

returnanswer;

}

publicstaticvoidexecPy(){

Processproc=null;

try{

proc=Runtime.getRuntime().exec("python"+PY_URL);

proc.waitFor();

}catch(IOExceptione){

e.printStackTrace();

}catch(InterruptedExceptione){

e.printStackTrace();

}

}

//测试码

publicstaticvoidmain(String[]args)throwsIOException,InterruptedException{

writeImagePath("D:\labs\mytest\test.jpg");

execPy();

System.out.println(readAnswer());

}

}

实际上就是通过Java执行一个命令行指令。

热点内容
解压前面签 发布:2025-02-06 16:02:00 浏览:322
华硕访问点 发布:2025-02-06 15:56:57 浏览:330
excel拼接sql 发布:2025-02-06 15:50:10 浏览:500
加密手机直播 发布:2025-02-06 15:49:31 浏览:534
自带ftp服务器好用吗 发布:2025-02-06 15:26:11 浏览:109
win7访问xp局域网 发布:2025-02-06 15:17:07 浏览:524
均线差算法 发布:2025-02-06 15:13:22 浏览:459
androidbrowser 发布:2025-02-06 15:09:49 浏览:622
勇敢的心ftp 发布:2025-02-06 15:09:03 浏览:327
php日志分析 发布:2025-02-06 15:08:19 浏览:874