java调用python函数runtime_Java利用Runtime调用Python脚本

本文介绍了如何在Java中利用Runtime类执行Python脚本,展示了一个简单的加法操作示例,并讨论了解决通过Runtime调用Python脚本时可能出现的中文乱码问题。此外,还提到了JavaBean的toString和equals方法重写以及Zabbix监控项预处理中对JavaScript的支持。
摘要由CSDN通过智能技术生成

Java利用Runtime调用Python脚本

使用Runtime.getRuntime()执行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);

}

}

运行结果如下:

调用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);

}

}

运行结果如下:

中文乱码问题解决

用Runtime.getRuntime.exec()调用Python脚本时,Java端捕获脚本有中文输出时,输出的中文可能会是乱码,因为Python安装在Windows环境下的默认编码格式是GBK。

解决方法:

在被调用的脚本的开头增加如下代码,一定要添加到其他依赖模块import之前:

import io

import sys

sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

参考文章:

java调用python的几种用法(看这篇就够了)

Java利用Runtime调用Python脚本时的中文乱码问题

Java利用Runtime调用Python脚本 相关文章

Java基础面试题(史上最全、持续更新、吐血推荐)

疯狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 面试必备 + 面试必备 疯狂创客圈 经典图书 : 《SpringCloud、Nginx高并发核心编程》 大厂必备 + 大厂必备 + 大厂必备 入大厂+涨工资 必备的 高并发社群: 【博客园总入口 】 疯狂

第26天学习打卡

JavaBean重写Object类的方法 需求:开发中通常需要将对象转换成字符串形式进行传输,也需要对将使用的对象进行相等判断。定义标准JavaBean类,重写toString和equals方法。 步骤: 定义标准Java Bean类Student,属性:id,name,score 重写toString(): 该对象的

Zabbix监控项预处理中对JavaScript的支持

作者:Andris Zeila,Zabbix开发工程师 Zabbix中国区唯一培训师 周松(译) 监控项预处理中对JavaScript的支持 几乎每个Zabbix版本中都会新增预处理的支持方式,很明显,很多时候存在一些无法预估的业务场景,所以我们必须对此提出一个通用的解决方案。反之

java httpclient跳过https证书验证

httpclien调用skipHttpsUtil得wrapClient方法跳过https证书验证 //POST SkipHttpsUtil skipHttpsUtil=new SkipHttpsUtil(); CloseableHttpClient httpclient = null; CloseableHttpResponse response = null; try { httpclient = (CloseableHttpClient)skipH

Java 基础 3

Java 中的 ArrayList 和数组的区别 1. 数组在创建时必须指定大小,而 ArrayList 是动态扩容的 int[] a = new int[8];ArrayListint b = new ArrayList(); 2. 存数据时,数组必须指定存放位置, a[2] = 5;b.add(3);b.add(0, 4); ArrayList 可以简单的添加到末

JAVA流程控制之循环结构

JAVA流程控制之循环结构 循环结构 While循环 格式 while(布尔表达式){ //循环内容} 死循环 while(true){} 特点 大多数情况要让循环停下,需要一个条件表达式,使其失效结束循环 少部分情况需要一直执行,比如服务器的请求响应监听等 循环条件恒定一直为true

Java开发中POJO和JSON互转时如何忽略隐藏字段

1. 前言 在 Java 开发中有时候某些敏感信息我们需要屏蔽掉,不能被消费这些数据的客户端知道。通常情况下我们会将其设置为 null 或者空字符 "" ,其实还有其它办法,如果你使用了 Jackson 的话。接下来我将以一个实际场景来告诉你可以怎么做。 2. Jackson如

【Java循环使用 + JS循环】

package cn.A_Collection_Of;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/** * 测试List Set

Java Deserializaiton In Action :) Day One

What is insecure deserialization To understand insecure deserialization, we must first understand what serialization is and how it is used in applications. Serialization is a process during which an object in a programming language(say, a

JavaScript判断对象中是否含有某个属性

判断对象中是否含有某个属性也是实际项目中常见的场景,现总结如下几种方法来判断。 本文关联文章之 JavaScript遍历对象的几种方法 一、点( . )或者方括号( [ ] ) + undefined判断 我们知道,通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值