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判断 我们知道,通过点或者方括号可以获取对象的属性值,如果对象上不存在该属性