zoukankan      html  css  js  c++  java
  • 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());
        }
    }
  • 相关阅读:
    Html5新增视频功能——video API 事件
    HTML5新增的视频功能——video属性
    jQuery封装的tab组件(可选自动+可选延迟处理+按需加载)
    jQuery封装tab选项卡组件(自定义自动功能和延迟显示功能)
    jQuery对象只能使用jQuery提供的方法,不能使用原生js提供的方法
    语法糖 —— 糖糖糖
    面向对象
    Call to undefined function IlluminateEncryptionopenssl_cipher_iv_length()
    HTTP协议
    功能算法
  • 原文地址:https://www.cnblogs.com/fbbg/p/12940088.html
Copyright © 2011-2022 走看看