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()); } }