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());
        }
    }
  • 相关阅读:
    iOS resign code with App Store profile and post to AppStore
    HTTPS科普扫盲帖 对称加密 非对称加密
    appid 评价
    使用Carthage安装第三方Swift库
    AngularJS:何时应该使用Directive、Controller、Service?
    xcode7 The operation couldn't be completed.
    cocoapods pod install 安装报错 is not used in any concrete target
    xcode7 NSAppTransportSecurity
    learning uboot how to set ddr parameter in qca4531 cpu
    learning uboot enable protect console
  • 原文地址:https://www.cnblogs.com/fbbg/p/12940088.html
Copyright © 2011-2022 走看看