• 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());
        }
    }
  • 相关阅读:
    Selenium WebDriver基础操作教程
    C# 运行cmd 并 执行命令语句
    【JAVA习题二】判断101-200之间有多少个素数,并输出所有素数。
    【JAVA习题一】古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一 对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    【JAVA随摘笔记一】进制转换
    【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)
    【C++初学者自学笔记二】函数重载(模块一)
    【JAVA蓝桥杯】基础练习2 十六进制转十进制
    【JAVA蓝桥杯】基础练习1 十进制转十六进制
    【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)
  • 原文地址:https://www.cnblogs.com/fbbg/p/12940088.html
Copyright © 2020-2023  润新知