返回顶部
首页 > 资讯 > 后端开发 > Python >Java调用Python程序方法总结(最
  • 138
分享到

Java调用Python程序方法总结(最

程序方法Java 2023-01-31 03:01:08 138人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

如何使用Java调用python程序本文为大家介绍如何java调用Python方法,供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的pytho

如何使用Java调用python程序

本文为大家介绍如何java调用Python方法,供大家参考。
实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的python脚本呢,一共有三种方法可以实现,具体方法分别为大家介绍:

  • Jython是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器,它是一个Python语言在Java中的完全实现。Jython也有很多从CPython中继承的模块库。最有趣的事情是Jython不像CPython或其他任何高级语言,它提供了对其实现语言的一切存取。所以Jython不仅给你提供了Python的库,同时也提供了所有的Java类。这使其有一个巨大的资源库。

这里我建议下载最新版本的Jpython,因为可以使用的python函数库会比老版本的多些,目前最新版本为2.7。
下载jar包请点击Download Jython 2.7.0 - Standalone Jar
下载安装程序请点击Download Jython 2.7.0 - Installer
如果使用
Maven依赖添加的话,使用下面的语句
<dependency>
    <groupId>org.python</groupId>
    <artifactId>jython-standalone</artifactId>
    <version>2.7.0</version>
</dependency>
以上准备好了,就可以直接在java类中写python语句了,具体代码如下:
PythonInterpreter interpreter = new PythonInterpreter();
interpreter.exec("a=[5,2,3,9,4,0]; ");
interpreter.exec("print(sorted(a));");  //此处python语句是3.x版本的语法
interpreter.exec("print sorted(a);");   //此处是python语句是2.x版本的语法

输出结果如下:
这里会看到输出的结果都是一样的,也就是说Jpython兼容python2.x和3.x版本的语句,运行速度会比直接运行python程序稍慢一点。
但是每次运行结果都会提示console: Failed to install ”: java.NIO.charset.UnsupportedCharsetException: cp0. 这样看起来很烦,因为每次运行结果都会出现红色的提示语句,以为是错误,程序员应该都不愿意看到这一幕,得想个办法解决。
解决方法如下:
在要执行的代码上右键, Run As>Run Configurations,选择第二个页签Arguments,在VM arguments中添加以下语句
-Dpython.console.encoding=UTF-8
然后Apply->Run就可以了。
如下图所示:


2. 在java中调用本地python脚本

首先在本地建立一个python脚本,命名为add.py,写了一个简单的两个数做加法的函数,代码如下:
def add(a,b):
    return a + b

python的功能函数已经写好,接下来我们写一个java的测试类(同样需要用到Jpython包),来测试一下是否可以运行成功。代码如下:
import org.python.core.PyFunction;
import org.python.core.PyInteger;
import org.python.core.PyObject;
import org.python.util.PythonInterpreter;

public class Java_Python_test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        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);
    }
}

运行结果如图所示:

OK,测试成功了~

关于Jpython更多详细的信息可以参考官方的相关文档,官网地址点这里。

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

import numpy as np

a = np.arange(12).reshape(3,4)
print(a)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Demo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Process proc;
        try {
            proc = Runtime.getRuntime().exec("python D:\\demo1.py");// 执行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();
        } 
    }
}

import sys

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

if __name__ == '__main__':
    a = []
    for i in range(1, len(sys.argv)):
        a.append((int(sys.argv[i])))

    print(func(a[0],a[1]))

int a = 18;
int b = 23;
try {
    String[] args = new String[] { "python", "D:\\demo2.py", String.valueOf(a), String.valueOf(b) };
    Process proc = Runtime.getRuntime().exec(args1);// 执行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();
}


本人电脑上由于同时存在两个python,而我不想用默认的那个,也不想修改默认的python解释器,这种情况下,可以写一个bat文件,在bat文件中通过dos命令切换到该python所在目录,然后运行py文件(py文件要放在该目录下)

下面附上程序:

bat文件:

@echo off  
C:
cd C:\Anaconda2\envs\py3
start python test.py
exit

java程序:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Demo1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Process proc;
        try {
            proc = Runtime.getRuntime().exec("cmd /c E:\\Faultdetection\\fault1\\run.bat");// 执行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();
        }
    }
}

总结: 以上就是Java调用python程序的所有方法总结,推荐使用第三种方法,比前两种方便很多。最后,欢迎大家转载,转载请注明出处Http://blog.csdn.net/it_xiao_bai/article/details/79074988

--结束END--

本文标题: Java调用Python程序方法总结(最

本文链接: https://lsjlt.com/news/187226.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java调用Python程序方法总结(最
    如何使用Java调用Python程序本文为大家介绍如何java调用python方法,供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的pytho...
    99+
    2023-01-31
    程序 方法 Java
  • Java调用Python程序方法总结
    如何使用Java调用Python程序 本文为大家介绍如何java调用python方法,供大家参考。 实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的py...
    99+
    2023-01-31
    程序 方法 Java
  • java调用python方法总结
    http://download.csdn.net/detail/xingjiarong/9429266 下载jython包,把其中的jython.jar添加到工程目录 一、在java类中直接执行python语句 import or...
    99+
    2023-01-31
    方法 java python
  • Python 序列的方法总结
    最近在做Python 的项目,特地整理了下 Python 序列的方法。序列sequence是python中最基本的数据结构,本文先对序列做一个简单的概括,之后简单讲解下所有序列都能通用的操作方法...
    99+
    2022-06-04
    序列 方法 Python
  • java调用WebService服务的四种方法总结
    目录一、前言二、简介  三、具体解析第一种方式,首先得下载axis2的jar包,Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService...
    99+
    2024-04-02
  • Android退出应用程序方法总结
    在Android中,可以使用以下几种方法退出应用程序:1. 使用finish()方法关闭当前Activity:在需要退出的Activ...
    99+
    2023-09-28
    Android
  • Java程序命令行参数用法总结
    目录基于命令行输入参数基于命令行输入系统属性JVM参数设置环境变量 vs 系统属性基于Maven命令运行Spring Boot应用前言: 在命令行中输入可以输入各类参数,本文将针对这...
    99+
    2024-04-02
  • 用java调用oracle存储过程总结
    本篇内容主要讲解“用java调用oracle存储过程总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用java调用oracle存储过程总结”吧!用java调用oracle存储过程总结//1、c...
    99+
    2023-06-03
  • python排序的方法实例总结
    1、冒泡排序 它反复访问要排序的元素列,并依次比较两个相邻的元素。如果顺序(如从大到小)错了,就交换它们。访问元素的工作是反复进行,直到没有相邻元素需要交换,也就是说元素列已经排序完成。 2、选择排序 首次从待排序的...
    99+
    2022-06-02
    python 排序方法
  • 【Python】计算程序运行时间的方法总结
    一、第一种方法 利用time包: import timedef test(): start_time = time.time() # 记录程序开始运行时间 s = 0 for i ...
    99+
    2023-09-06
    python
  • Android Intent调用 Uri的方法总结
    Android Intent调用 Uri的方法总结//调用浏览器Uri uri = Uri.parse(""); Intent it = new Intent(Intent.ACTION_VIEW,uri); startActivity(i...
    99+
    2023-05-30
    android intent uri
  • Java同步锁synchronized用法的最全总结
    目录一、并发同步问题二、锁的简介三、synchronized的三种应用方式1.修饰一个实例方法2.修饰一个静态方法3.修饰一个代码块(2)锁对象为类的Class对象四、synchro...
    99+
    2023-03-21
    Java同步锁 synchronized的总结
  • Java创建线程的七种方法,全网最全面总结~
    目录 前言 一、继承Thread,重写run方法 二、实现Runnable接口,重写run方法 三、使用匿名内部类创建 Thread 子类对象 四、使用匿名内部类,实现Runnable接口 五、lambda表达式 六、实现Callable...
    99+
    2023-09-13
    java 多线程
  • Java程序包不存在的3种解决方法总结
    目录一、问题描述二、解决方案  方法一:maven包管理的clean方法方法二:清理缓存方法三:设置配置三、结语总结 一、问题描述 报错:xxx程序包不存在 二...
    99+
    2023-01-15
    java导出jar包不能运行 java 程序包不存在 java 包不存在
  • Android 启动第三方程序的方法总结
    Android 启动第三方程序的方法总结 方法一: Intent intent = new Intent(); intent.setClassName(<packa...
    99+
    2022-06-06
    程序 方法 启动 Android
  • python用法总结
    requests库的用法: requests是python实现的简单易用的HTTP库 因为是第三方库,所以使用前需要cmd安装 pip ×××tall requests 安装完成后import一下,正常则说明可以开始使用了 基本用法: im...
    99+
    2023-01-31
    python
  • java如何调用Python程序
    这篇文章主要介绍了java如何调用Python程序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。因为工作需要,就简单学习了下,用的是IDEA ,jdk 1.8本地Proces...
    99+
    2023-06-20
  • Android 安全退出应用程序的方法总结
    Android 安全退出应用程序的方法总结 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的...
    99+
    2022-06-06
    程序 方法 应用程序 Android
  • 总结Python常用的魔法方法
    目录一、算数运算符的魔法方法二、反运算相关的魔法方法三、增量赋值运算四、一元操作符一、算数运算符的魔法方法 python2.2以后,对类和类型进行了统一,做法就是讲int(...
    99+
    2024-04-02
  • python程序调用远程服务的方法
    小编给大家分享一下python程序调用远程服务的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言项目是基于python3的PC桌面项目。因为需要对外发布we...
    99+
    2023-06-07
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作