📜  获取输出到另一个脚本的数字值 java (1)

📅  最后修改于: 2023-12-03 14:57:17.641000             🧑  作者: Mango

获取输出到另一个脚本的数字值 Java

在Java程序中,有时候需要将某个值输出到另一个脚本中进行处理或操作,如何获取这个值呢?下面将介绍两种方法。

1. Runtime.exec() 方法

使用Runtime.exec()方法可以在Java程序中调用命令行来执行外部命令,这样就可以将输出结果返回到Java程序中。

下面是示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class GetOutput {

    public static void main(String[] args) {
        try {
            //要执行的命令
            String command = "python test.py";
            //获取Runtime对象
            Runtime runtime = Runtime.getRuntime();
            //执行命令并获取返回结果
            Process process = runtime.exec(command);
            InputStream is = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("输出结果:" + line);
            }
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码中,我们通过Runtime.getRuntime()方法获取Runtime对象,然后使用Runtime.exec()方法执行命令"python test.py",并将返回结果读取出来输出。

需要注意的是,Runtime.exec()方法是阻塞的,即程序会一直等待命令执行完毕才会继续往下执行。所以如果执行的命令比较耗时,应该将它放到单独的线程中执行,以免影响程序的执行。

2. ProcessBuilder.start() 方法

ProcessBuilder类可以帮助我们创建一个进程,并提供进程的输入、输出和错误流。使用ProcessBuilder.start()方法可以启动一个进程,并返回Process对象,通过Process对象就可以获取命令执行的输出结果。

下面是示例代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class GetOutput {

    public static void main(String[] args) {
        try {
            //要执行的命令
            List<String> commandList = new ArrayList<String>();
            commandList.add("python");
            commandList.add("test.py");
            //获取ProcessBuilder对象
            ProcessBuilder processBuilder = new ProcessBuilder(commandList);
            //执行命令并获取返回结果
            Process process = processBuilder.start();
            InputStream is = process.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println("输出结果:" + line);
            }
            is.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上面的代码中,我们通过ProcessBuilder对象创建一个进程,在创建进程的时候设置进程要执行的命令,并使用ProcessBuilder.start()方法启动这个进程,最后通过Process对象获取命令执行的输出结果。

需要注意的是,ProcessBuilder会自动将参数转义,可以有效地避免命令注入攻击。并且ProcessBuilder允许我们在创建进程时设置进程的工作目录、环境变量等参数,这样可以更方便地控制进程的执行。