Jython-在JAVA调用Python脚本使用方法详解+示例代码
目录
前言
一、Jython简介
1.场景
2.下载
二、运用示例
构建Maven项目
构建java,运行python语句:
运行python脚本:
运行带有第三方库的Python脚本
转为jar包
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
前言
写这篇文章之前一直被一个BUG困扰,之前在Python开发的SQL血缘解析得到项目。我们知道Python的语言特性决定了它在开发方面的快速和效率,但是现在很多平台和服务还是在JAVA基础之上。使用Python开发完脚本之后一些要求还需要能够集成到JAVA平台里面去,转成jar包提供服务。那么这里的运用场景就是如何在JAVA里面调用Python脚本,而且平常情况下Python的脚本使用的第三方库还是挺多的,这里会存在很多种版本冲突或者是不兼容的问题。
在网上搜寻一番后发现大多人使用的是Jython,这个框架还是有些年头的好久没更新了。今天试了一下效果是有的但是还是存在很多种问题。并且网上关于Jython的详细方法运用还是比较少而且不全面,对于这部分要使用到项目上还是要有个详细的认知最负责。故作此篇,若有不尽人意的地方请在评论区里提出,博主会长期维护自己的文章,谢谢各位的支持!
一、Jython简介
Jython项目提供了Java中Python的实现,为Python提供了在JVM上运行和访问Java编写的类。当前版本(Jython 2.7.x)仅支持Python 2,目前写这篇文章的最新版本到了2.7.3了。这也没有办法,我看作者17年写到2.7之后道现在为止5年了还没有支持到Python 3.毕竟是人家的开源项目也不太好说什么,程序员都忙。那么这里我们需要明白到一点也是后续影响这个Python脚本的:
最新版本Jython2.7.3仅支持Python2.7。那么如果我们的Python脚本里面使用到的一些代码或者是第三方库不兼容Python2.7版本的话,就会报错。如:
这里就因为sqlparse的最新版本仅支持3.5以上的版本,到Jython里面运行就会导致符号识别问题报错。
那么如果我们要考虑用到Jython的话就不得不考虑你开发的Python脚本是否在Python2.7的版本下也能正常运行。
1.场景
- 嵌入式脚本-Java程序员可以将Jython库添加到他们的系统中,以允许用户编写简单或复杂的Python脚本,为应用程序添加功能。
- 交互式实验-Jython提供了一个交互式解释器,可用于与Java包或运行的Java应用程序交互。这允许程序员使用Jython来实验和调试任何Java系统。
- 快速应用程序开发——Python程序通常比等效Java程序短2-10倍。这直接转化为程序员生产力的提高。Python和Java之间的无缝交互允许开发人员在开发过程中和产品交付过程中自由地混合这两种语言。
2.下载
直接去官网下载就好了Home | Jython,若是下载有困难的可以联系博主,已经把资源上传至CSDN了。
下载完点击即可安装,添加一下下载路径到环境变量:
%Jython_HOME%\bin;%Jython_HOME%\Lib
系统变量:
其中Doc文件中是有关于查询Jython类功能的网页:
二、运用示例
构建Maven项目
引入pom,添加依赖:
<dependencies><dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.3</version></dependency></dependencies>
构建java,运行python语句:
import org.python.util.PythonInterpreter;public class HelloPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.exec("print('Hello python')");}}
运行python脚本:
python脚本:
print('Hello python')
JAVA代码:
import org.python.util.PythonInterpreter;public class HelloPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile("D:\\Jython\\test.py");}}
运行带有第三方库的Python脚本
这里大家看了上面的内容就知道一定要兼容2.7一下的版本的第三方库:
比如我跑一个仅支持py3.5以上版本的第三方库:
import org.python.core.Py;
import org.python.core.PySystemState;
import org.python.util.PythonInterpreter;public class HelloPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();PySystemState sys = Py.getSystemState();sys.path.add("D:\\anaconda3\\Lib\\site-packages");interpreter.execfile("D:\\pythonProject\\main.py");}}
就报了格式问题错误了,2.7和3.x以上的版本关于字符设定的差异还是很多的。
很多python的第三方库都逐渐的放弃了python2了,比如pandas和numpy:
我建议如果一定要做JAVA的脚本还是创建一个Python2.7的环境用于压测。
转为jar包
将需要转换的python文件也放在安装的jython目录下面,直接将编写好的JAVA代码转成jar就好了。2.7版本已经没有jythonc了取而代之的是jython -jar,需要归档没有这个必要。
点关注,防走丢,如有纰漏之处,请留言指教,非常感谢
以上就是本期全部内容。我是fanstuck ,有问题大家随时留言讨论 ,我们下期见
Jython-在JAVA调用Python脚本使用方法详解+示例代码相关推荐
- java 调用python脚本过程_通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- java执行python返回null_[转]java调用python脚本以及通过Process.waitFor()直接调用python模块返回错误代码1的一种解决办法...
常见的java调用python脚本方式 通过jython提供的类库实现 通过Runtime.getRuntime()开启进程来执行脚本文件 通过jython提供的类库实现 通过jython实现的话,我 ...
- Java调用Python脚本:轻松实现两种语言的互操作性
Java和Python都是非常流行的编程语言,它们都有自己的优点,但也有自己的局限性.在编写应用程序时,我们可能需要使用两种语言来共同完成一项任务.在这种情况下,Java需要调用Python脚本来解决 ...
- java执行python脚本_通过Java调用Python脚本
在进行开发的过程中,偶尔会遇到需要使用Java调用Python脚本的时候,毕竟Python在诸如爬虫,以及科学计算等方面具有天然的优势.最近在工作中遇到需要在Java程序中调用已经写好的Python程 ...
- Java调用python脚本
Java调用python脚本 最近也是刚开始学python,所以这里写了一个简单的小方法用Java来调用python脚本.后期再进行更新. 1.Java启动程序的方法 在Java中提供了两种方法来启动 ...
- windows10中java调用python脚本
文章目录 1. windows基础环境 1.1 java安装 1.1.1 下载jdk(版本可自选) 1.1.2 安装jdk 1.1.3 配置java环境变量 1.2 python安装 1.2.1 py ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- 好程序员Java学习路线分享finalize()方法详解
好程序员Java学习路线分享finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法.. fi ...
- python中search用法_Python中的python re.search方法详解
re.search扫描整个字符串并返回第一个成功的匹配,若string中包含pattern子串,则返回Match对象,否则返回None,注意,如果string中存在多个pattern子串,只返回第一个 ...
最新文章
- 强烈安利!这个私藏已久的神器!
- Entity Framework 的事务 DbTransaction
- matlab 条形图与饼图
- sap 订单状态修改时间_SAP订单状态详解
- 解决 dockerfile 构建镜像报错: [WARNING]: Empty continuation lines will become errors in a future release.
- 笨办法学 Python · 续 练习 14:双链表
- 手机越贵打车越贵?教授打车800次总结出规律,律师:属于违法欺诈行为
- iOS 14代码泄露iPhone 12系列细节:有且仅有两款配备ToF 3D镜头
- java sql 写入万条数据_如何快速向数据库插1000万数据?4种方法对比,它简单却速度最快
- 究竟 javascript 错误处理有哪些类型?
- 【转】XP下OpenProcess( PROCESS_ALL_ACCESS...失败
- PHP 常用算法集锦
- KML和KMZ 用什么软件打开?
- android fastboot模式下载以及出现的问题
- java 图片怎么设置抗锯齿,图片变形的抗锯齿处理方法
- vscode好用插件——磨刀不误砍柴工!
- 冒充云销售的懒虫和毒虫们
- PTA题目 查询水果价格
- linux三维动画软件,Blender2.9免费版下载
- 【学习笔记】VGG 网络结构
热门文章
- 人工智能时代已经开始
- A股和B股票的区别?
- 【点云前视图FV】详细理解雷达点云前视图(FV, Front View)
- RouterOS(ROS)软路由安全性配置指南
- 双系统[mac os][win]当中,分区导致进不去苹果分区解决办法
- [RTT][ENV][PACKAGE]如何制作软件包
- 查看变量类型的python内置函数名_查看变量类型的Python内置函数是()
- TkMyBatis插件构造方法常用注解
- 量子力学概论第一章---波函数
- 将多个文件压缩成gzip,将gzip解压成多个文件