java中运行python脚本

package com.ruoyi.python;

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

/**
 * @author 
 * @date Create in 2020/5/22
 **/
public class DemoTest {

    private static final String[] python = {"python", "D:\ruoyi\RuoYi-Vue\ruoyi\src\main\resources\hello.py", "zhangsan"};

    public static void main(String[] args) throws IOException, InterruptedException {
//        Runtime.getRuntime().exec()实现了调用服务器命令脚本来执行功能需要
           /*
           * 1、runtime类:代表了当前程序的运行环境
           * 2、getRuntime():该方法用于返回当前应用程序的运行环境对象
           * 3、exec:根据地址执行相应的可执行文件
           *     public Process exec(String command)-----在单独的进程中执行指定的字符串命令。
           *     public Process exec(String [] cmdArray)---在单独的进程中执行指定命令和变量
           *     public Process exec(String command, String [] envp)----在指定环境的独立进程中执行指定命令和变量
           *     public Process exec(String [] cmdArray, String [] envp)----在指定环境的独立进程中执行指定的命令和变量
           *     public Process exec(String command,String[] envp,File dir)----在指定环境和工作目录的独立进程中执行指定的字符串命令,并传入参数
           *     public Process exec(String[] cmdarray,String[] envp,File dir)----在指定环境和工作目录的独立进程中执行指定的命令和变量,并传入参数
           * */

//           process类:封装了一个进程.可以通过Runtime.getRuntime().exec()实现,也可以通过ProcessBuilder.start()创建进程
        /*
        *Process 类提供了子进程的输入流,子进程的输出流子进程的输入流,等待进程完成,检查进程的推出状态以及销毁进程的方法;
        *创建的子进程没有自己的控制台或终端,其所有的io操作都是通过(输入流、输出流、错误流)重定向到父进程中。
                *destroy()  杀掉子进程。
                *exitValue()   返回子进程的出口值。
                *InputStream getErrorStream()  获得子进程的错误流。
                *InputStream getInputStream()  获得子进程的输入流。
                *OutputStream getOutputStream() 获得子进程的输出流。
                *waitFor() 导致当前线程等待,如果必要,一直要等到由该 Process 对象表示的进程已经终止。
        *
        *
        * */
        Process exec = Runtime.getRuntime().exec(python);

        // success:0 成功, 1: 失败
        int success = exec.waitFor();

//        inputStreamReader():字节流到字符流的桥接器。inputStreamReader()继承自StreamDecoder,fileReader继承自InputStreamReader()
//        BufferedReader():缓冲流
        BufferedReader reader = new BufferedReader(new InputStreamReader(exec.getInputStream(), "GBK"));
//        StringBuilder 是一个可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口。
//        StringBuffer 也是继承于AbstractStringBuilder的子类;但是,StringBuilder和StringBuffer不同,前者是非线程安全的,后者是线程安全的。
        StringBuilder builder = new StringBuilder();
        String line;
//        reader.readLine():按行读取字符串,这个文件读完返回null
        while (Objects.nonNull(line = reader.readLine())) {
//            append():拼接字符串
            builder.append(line);
        }
        System.out.println(builder.getClass().toString());
        System.out.println(success+builder.toString());
    }
}
原文地址:https://www.cnblogs.com/fbbg/p/12940088.html