当前位置: 首页 > news >正文

DevOps系列文章之 java调用python脚本

在java类中直接执行python语句

在java类中直接调用本地python脚本

使用Runtime.getRuntime()执行python脚本文件(推荐)

调用python脚本中的函数

简单介绍

官网地址 首页 | (jython.org)

Jython项目提供了Java中的Python实现, 为Python提供了在JVM上运行的好处,并可以访问用Java编写的类。 当前版本(Jython 2.7.x)仅支持Python 2(抱歉)。 在项目的GitHub存储库中有一个关于Python 3的工作。

Jython实现可免费用于商业和非商业用途。 它们与 PSF 许可证 v2 下的源代码一起分发。

Jython是Java的补充,特别适合以下任务:

  • 嵌入式脚本 - Java 程序员可以将 Jython 库添加到他们的系统中,以允许最终用户编写简单或复杂的脚本,为应用程序添加功能。
  • 交互式实验 - Jython 提供了一个交互式解释器,可用于与 Java 包或正在运行的 Java 应用程序进行交互。这允许程序员使用Jython试验和调试任何Java系统。
  • 快速应用程序开发 - Python 程序通常比同等的 Java 程序短 2-10 倍。这直接转化为程序员生产力的提高。Python和Java之间的无缝交互允许开发人员在开发和发布产品期间自由混合这两种语言。
下面是在一个简单的 Java 应用程序中运行 Python 代码的示例
import org.python.util.PythonInterpreter;public class JythonHelloWorld {public static void main(String[] args) {try(PythonInterpreter pyInterp = new PythonInterpreter()) {pyInterp.exec("print('Hello Python World!')");}}
}
下面是从 Python 代码使用 Java 的示例
from java.lang import System # Java importprint('Running on Java version: ' + System.getProperty('java.version'))
print('Unix time from Java: ' + str(System.currentTimeMillis()))

准备工作:

创建maven工程,结构如下:关注箭头的几个类即可

到官网Downloads | Jython下载Jython的jar包或者在maven的pom.xml文件中加入如下代码:

<dependency><groupId>org.python</groupId><artifactId>jython-standalone</artifactId><version>2.7.0</version>
</dependency>
​​​​​​​

1.在java类中直接执行python语句

 创建JavaRunPython.java类:

package com.test;import org.python.util.PythonInterpreter;public class JavaRunPython {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.exec("a='hello world'; ");interpreter.exec("print a;");}}

复制代码

输出结果如下:

2.在java中直接调用python脚本

在本地的D盘创建一个python脚本,文件名字为javaPythonFile.py,文件内容如下:

a = 1
b = 2
print (a + b)

创建JavaPythonFile.java类,内容如下:

package com.test;import org.python.util.PythonInterpreter;public class JavaPythonFile {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile("D:\\javaPythonFile.py");}
}
 

输出结果如下:

3.使用Runtime.getRuntime()执行python脚本文件,推荐使用

在本地的D盘创建一个python脚本,文件名字为Runtime.py,文件内容如下:

print('RuntimeDemo')

创建RuntimeFunction.java类,内容如下:

package com.test;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class RuntimeFunction {public static void main(String[] args) {Process proc;try {proc = Runtime.getRuntime().exec("python D:\\Runtime.py");BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));String line = null;while ((line = in.readLine()) != null) {System.out.println(line);}in.close();proc.waitFor();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} }
}

4.调用python脚本中的函数

在本地的D盘创建一个python脚本,文件名字为add.py,文件内容如下:

def add(a,b):return a + b

创建Function.java类,内容如下:

package com.test;import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;public class Function {public static void main(String[] args) {PythonInterpreter interpreter = new PythonInterpreter();interpreter.execfile("D:\\add.py");// 第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型PyFunction pyFunction = interpreter.get("add", PyFunction.class);int a = 5, b = 10;//调用函数,如果函数需要参数,在Java中必须先将参数转化为对应的“Python类型”PyObject pyobj = pyFunction.__call__(new PyInteger(a), new PyInteger(b)); System.out.println("the anwser is: " + pyobj);}}

运行结果如下:

相关文章:

DevOps系列文章之 java调用python脚本

在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件&#xff08;推荐&#xff09; 调用python脚本中的函数 简单介绍 官网地址 首页 | (jython.org) Jython项目提供了Java中的Python实现&#xff0c; 为Python提供了…...

PHP异步框架总结

目前主要有: 国产 swoole workerman 国外 framework-x revoltrevolt reactphp amphp async...

vsto excel 可以异步写入值么

在 VSTO (Visual Studio Tools for Office) 中&#xff0c;Excel 可以使用异步方式写入值。异步编程允许您在后台线程中执行耗时的操作&#xff0c;而不会阻塞主线程&#xff0c;从而提高程序的响应性能。 从 .NET 4.5 开始&#xff0c;可以使用异步和 await 关键字来简化异步…...

Android Gradle 骚操作,将两个项目合并到一个项目中

1. 前言 在工作中&#xff0c;由于各种原因&#xff0c;导致需要将两个可单独运行的App项目&#xff0c;合并到一个git仓库里&#xff0c;且单独的App项目里还有其他Module模块。 如果只是将两个项目复制到同一个文件夹下&#xff0c;还是得单独打开各个项目&#xff0c;是很不…...

虹科案例|如何分析设备故障时间和次数,打破生产瓶颈?

虹科设备绩效管理系统 保障生产设备的稳定性和可靠性 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一&#xff0c;设备故障的频发严重影响企业的正常生产&#xff0c;那么如何分析设备故障时间和次数&#xff0c;查找设备故障原因&#xff0c;协助企业打破生产瓶…...

SVN代码迁移到Git方法

1.在SVN上新增一个项目 一、点击新建项目 二、创建空白项目 三、填入项目信息 四、myProject项目模板创建成功 2.将代码提交到Git 一、新建一个文件夹myProject&#xff0c;将从SVN下载过来的代码复制一份拷贝到该文件夹下&#xff0c;注意&#xff1a;不要把.SVN文件拷…...

Linux更换阿里云yum源

1、备份 cd /etc/yum.repos.d/ mv CentOS-Base.repo CentOS-Base.backup2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/ wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo如果出现解析错误 Could not resolve host: mirrors.a…...

【1.3】Java微服务:Spring Cloud版本说明

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 微服务 ✨特色专栏&#xff1a; 知识分享 &#x…...

OpenMP

官方文档&#xff1a;OpenMP | LLNL HPC Tutorials OpenMP总览 统一内存访问&#xff1a;OpenMP、Pthreads 非统一内存访问&#xff1a;MPI OpenMP与Pthread OpenMP原理 串行区到达并行区后会派生多个线程&#xff0c;并行区代码执行完后进行线程合并&#xff0c;剩下主线程 编…...

Eureka 学习笔记4:EurekaClient

版本 awsVersion ‘1.11.277’ EurekaClient 接口实现了 LookupService 接口&#xff0c;拥有唯一的实现类 DiscoveryClient 类。 LookupService 接口提供以下功能&#xff1a; 获取注册表根据应用名称获取应用根据实例 id 获取实例信息 public interface LookupService<…...

前端后端路径问题详解

加了项目名&#xff0c;访问所有页面都是 在 项目名下 出来的路径 不加项目名&#xff0c;访问所有页面都不用加项目名&#xff0c;然后前后端的加/的效果都一样&#xff0c;都是在根目录下没有项目名的路径&#xff01;&#xff01;&#xff01; 后端 一、MVC 1.不管是转发…...

@vue/composition-api原理解析

前言 上一篇文章介绍了vue/composition-api是什么&#xff0c;以及为什么要用&#xff0c;现在来系统地解析一下 vue/composition-api 的实现原理&#xff0c;希望可以加深对其工作机制的理解。 老规矩先分享下AI评价&#xff1a;对vue/composition-api实现原理的介绍整体上非…...

Kubernetes(K8s)从入门到精通系列之三:K8s的基本概念和术语之资源对象概述

Kubernetes K8s从入门到精通系列之三&#xff1a;K8s的基本概念和术语之资源对象概述 K8s中的基本概念和术语大多是围绕资源对象(Resource Object)来说的&#xff0c;而资源对象在总体上可分为以下两类&#xff1a; 某种资源的对象&#xff0c;例如节点(Node)、Pod、服务(Serv…...

cc2652在使用过程中的一些注意事项

可能不只是cc2652有这些坑&#xff0c;估计cc26xx系列都存在。 CCS的预编译宏配置位置 时钟获取 时钟获取__STATIC_INLINE uint32_t SysCtrlClockGet( void )在sys_ctrl.h中&#xff0c;sys_ctrl.h没有在工程路径下面&#xff0c;在其sdk中 节拍时间获取 ICall_getTicks(); …...

YAPI接口自动鉴权功能部署详解

目录 安装准备 在线安装 离线安装 配置使用 安装准备 以下操作&#xff0c;默认要求自己部署过yapi&#xff0c;最好是部署过yapi二次开发环境。 无论是选择在线安装或者是本地安装&#xff0c;都需要安装client工具。 1、yapi-cli&#xff1a;npm install yapi-cli –g…...

【雕爷学编程】Arduino动手做(180)---Seeeduino Lotus开发板3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…...

搜索与图论(二)

最短路 单源最短路 所有边权都是正数 朴素Dijkstra算法 基本思路:从1号点到其他点的最短距离 步骤: 定义一个s集合包含当前已确定最短距离的点 1、初始化距离dis[1] 0,dis[其它] 正无穷 2、for i 0-n循环n次 2.1找到不在s中的距离最近的点 ->t 2.2把t加到s当中去…...

【SQL】-【计算两个varchar类型的timestamp的毫秒差】

背景 TRANSTAMP3、TRANSTAMP2在Oracle数据库中的类型为varchar&#xff0c;但实际保存的值是时间戳timestamp类型&#xff0c;现在要计算二者的毫秒差 Oracle或MySQL extract(second from (to_timestamp(TRANSTAMP3,yyyy-mm-dd hh24:mi:ss.ff) - to_timestamp(TRANSTAMP2,yyy…...

Java 微信商家打款到零钱(旧版本接口)

旧版微信支付接口要求请求时携带证书请求 构建请求参数 /*** 付款到零钱** param withdrawalDto dto撤军* return {link Map }<{link String }, {link Object }>* throws Exception 异常* Author chen 2023-07-27 15:04*/private Map<String, Object> payToUser(Wi…...

Vue+Element ui Study

目录 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 2、this.$refs使用方法 Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“ 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 :show-overflow-toolti…...

终极网盘下载加速工具:告别限速,享受高速下载自由

终极网盘下载加速工具&#xff1a;告别限速&#xff0c;享受高速下载自由 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

终极指南:如何在Mac上免费创建Windows启动盘(3步教程)

终极指南&#xff1a;如何在Mac上免费创建Windows启动盘&#xff08;3步教程&#xff09; 【免费下载链接】windiskwriter &#x1f5a5; Windows Bootable USB creator for macOS. &#x1f6e0; Patches Windows 11 to bypass TPM and Secure Boot requirements. &#x1f47…...

【花雕动手做】Aily Blockly 安装 + 环境配置清单 + 避坑指南

项目情况 Aily Blockly 是 Aily Project 推出的开源、AI 驱动的硬件图形化开发 IDE&#xff0c;核心是用 “拖拽积木 自然语言对话 端云协同编译” 大幅降低嵌入式&#xff08;ESP32/Arduino/STM32&#xff09;开发门槛&#xff0c;兼顾新手易用与工业级工程化能力。 1、核心…...

别再问SAP权限怎么配了!从MM01物料创建权限入手,5分钟搞懂PFCG角色配置核心逻辑

SAP权限配置实战&#xff1a;从MM01物料创建权限掌握PFCG角色设计精髓 在SAP项目实施中&#xff0c;权限配置往往是新手顾问最容易卡壳的环节。当用户抱怨"为什么我点这个按钮就报权限错误"时&#xff0c;很多刚入行的顾问只能尴尬地回应"我查查后台配置"。…...

如何提升区域科技创新服务效率与资源整合能力?

观点作者&#xff1a;科易网-国家科技成果转化&#xff08;厦门&#xff09;示范基地现状概述&#xff1a;区域科技创新服务的成效与短板 在数智化转型加速的背景下&#xff0c;区域科技创新服务体系正经历深刻变革。以数据为核心的生产要素重塑了创新生态&#xff0c;科技成果…...

解决Service broker not enable. Please activete it using ‘ALTER DATABASE My Database SET ENABLE BROKER

目录 1.问题 2.解决办法 3.说明 1.问题 网站运行报错&#xff1a;Service broker not enable. Please activete it using ALTER DATABASE My Database SET ENABLE BROKER 2.解决办法 服务代理&#xff08;Service Broker&#xff09;未启用。请使用 ALTER DATABASE [数据库…...

手把手教你用W25Q32 SPI Flash:从波形图看懂擦除、写入和读取(附完整代码)

手把手教你用W25Q32 SPI Flash&#xff1a;从波形图看懂擦除、写入和读取&#xff08;附完整代码&#xff09; 在嵌入式开发中&#xff0c;SPI Flash存储器因其高性价比、大容量和简单接口而广受欢迎。W25Q32作为一款32Mb的SPI Flash芯片&#xff0c;被广泛应用于物联网设备、消…...

2026年大模型内容精准收录实操,企业长效流量布局核心方法论

引言&#xff1a;大模型正在成为企业品牌认知的新前置入口。当越来越多用户绕过搜索引擎、直接向AI提问"哪家公司更适合""某个方案值不值得选"时&#xff0c;企业在AI回答中的位置、语气和引用来源&#xff0c;已经构成真实的竞争格局。本文将从大模型内容…...

告别邮件测试烦恼:MailHog一站式解决方案让开发调试更高效

告别邮件测试烦恼&#xff1a;MailHog一站式解决方案让开发调试更高效 【免费下载链接】MailHog Web and API based SMTP testing 项目地址: https://gitcode.com/gh_mirrors/ma/MailHog 还在为测试邮件功能而烦恼吗&#xff1f;每次开发邮件发送模块时&#xff0c;你是…...

从游戏动作到影视特效:Blender Python骨骼动画脚本的跨界实战指南

从游戏动作到影视特效&#xff1a;Blender Python骨骼动画脚本的跨界实战指南 在数字内容创作领域&#xff0c;骨骼动画是连接游戏开发与影视特效的核心技术纽带。无论是独立游戏开发者需要将角色动作导出到Unity引擎&#xff0c;还是影视动画师希望批量处理动作捕捉数据&#…...