首页 > 编程语言 >java如何运行Python文件程序

java如何运行Python文件程序

时间:2024-08-28 14:37:13浏览次数:8  
标签:java String Python py 程序 command log

有时候会遇到在java中启动Python的程序,下面进行说明

package com.zxh.util;

import lombok.extern.slf4j.Slf4j;

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

/**
 * python执行器
 *
 * @Author zxh
 * @Date 2024/8/27 0027
 */
@Slf4j
public class PythonExecution {
    /**
     * 运行py文件
     *
     * @param directoryPath py文件的根路径
     * @param command       要执行的命令
     */
    public static void execFile(String directoryPath, String command) {
        try {
            ProcessBuilder processBuilder = new ProcessBuilder();
            //切换到py文件的路径并执行命令
            processBuilder.command("cmd.exe", "/c", "cd /d " + directoryPath + " && " + command);
            Process process = processBuilder.start();
            //等待执行完成的后退出状态码,0表示成功,其他是失败
            int exitCode = process.waitFor();
            log.info("Command exited with code {}.执行结果:{}", exitCode, exitCode == 0);
            // 获取 Python 脚本的输出结果
            InputStream inputStream = process.getInputStream();
            //指定编码,py默认编码会导致乱码
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"gb2312"));
            String line;
            Boolean isPrint = false;
            while ((line = reader.readLine()) != null) {
                if (!isPrint) {
                    log.info("py执行后返回结果:");
                }
                isPrint = true;
                log.info(line);
            }
            Boolean isError = false;
            // 获取 Python 脚本的错误信息
            InputStream errorStream = process.getErrorStream();
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
            String errorLine;
            while ((errorLine = errorReader.readLine()) != null) {
                if (!isError) {
                    log.info("py执行的错误信息:");
                }
                isError = true;
                log.info(errorLine);
            }
        } catch (IOException e) {
            log.error("执行py时出现异常:", e);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

test.py内容如下:

result = "Hello from Python!你好"
print(result)

直接调用,指定py文件的路径和文件名(原因:可能会存在当前运行的py文件和运行的java程序不在同一文件夹下)

    public static void main(String[] args)  {
        String directoryPath = "D:\\项目\\demo\\springboot-demo\\src\\main\\resources\\py";
        String command = "python test.py";
        PythonExecution.execFile(directoryPath, command);
    }

执行结果

需要注意的是,对于py文件中返回值包含中文,则需要进行编码的设置,否则是乱码。

标签:java,String,Python,py,程序,command,log
From: https://www.cnblogs.com/zys2019/p/18382967

相关文章

  • python optional import
    Python的可选导入:提升代码可读性与简洁性的利器在Python编程中,我们常常会使用到各种库和模块。为了方便使用这些库和模块,我们需要通过导入语句将其引入到我们的程序中。然而,随着项目规模的增大,导入语句可能会变得越来越复杂,这不仅增加了代码的长度,也降低了代码的可读性。那么,有没......
  • Python内置的getclassname()函数
    Python是一种广泛使用的编程语言,其在面向对象编程方面具有显著优势。为了更好地理解和应用这一领域的基础知识,熟悉Python编程中类的相关操作是非常重要的。本文主要介绍如何使用Python内置的getclassname()函数获取类的名称,并通过实际代码示例来演示该函数的使用。首先,我们需要了......
  • 信息熵计算程序[Python+CSV格式数据集]
    0前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。程序中包含了计算过程的数据和详细信息以及最终计算结果。编程语言为Python,搭配CSV数据格式使用。1数据集1.1游玩数据集根据天气状......
  • 基于ssm+vue高校旧书交易系统【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的普及与知识更新的加速,高校内书籍资源的流通与再利用成为了一个亟待解决的问题。每年,大量学生因毕业、转专业等原因,手中积累了大量不再......
  • 基于ssm+vue高校教材管理系统【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校教材管理成为了一个日益复杂且关键的环节。传统的手工管理模式已难以满足现代高校对教材管理的精准性、高效性和透明度的......
  • 基于ssm+vue的宠物领养管理系统【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代社会生活节奏的加快,人们对于精神寄托与情感陪伴的需求日益增长,宠物作为家庭的一员,其角色日益重要。然而,宠物数量的激增也带来了诸多社会问题......
  • 基于ssm+vue高校科研信息管理系统【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着高等教育的快速发展,高校科研活动日益频繁且复杂,传统的科研信息管理方式已难以满足当前高效、精准的管理需求。科研信息的海量增长、科研人员的多......
  • 基于ssm+vue宠物爱好者交流网站的设计与实现【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着现代社会生活节奏的加快,宠物逐渐成为许多人生活中不可或缺的伴侣,它们不仅提供了情感上的慰藉,还丰富了人们的精神世界。然而,在享受宠物带来的快乐......
  • 基于ssm+vue高校人事管理系统的设计与实现【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容进度安排: 1.2024年11月18日至12月21日:查阅资料,拟定写作大纲,完成研究内容、现状、方法的研究等,提交开题报告;2.2024年12月21日至2024年3月13日:基本完成毕业......
  • 基于ssm+vue高校师生党建平台【开题+程序+论文】
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和“互联网+”战略的深入实施,高校党建工作正逐步迈向数字化、智能化转型的新阶段。传统的党建管理模式面临着效率低下、信息......