从 Java 进程读取输入流

2024-01-12

我正在尝试打开终端控制台,并能够向其读取/写入命令。

我读到了一些问题,例如:具有输入/输出流的 Java 进程 https://stackoverflow.com/questions/3643939/java-process-with-input-output-stream

这样就可以构建一个小应用程序,打开终端并将命令传递到控制台并打印结果,它可以与任何系统命令很好地配合,例如浏览文件夹、删除文件等。

我遇到的问题是,我需要从该控制台加载另一个 java 程序并读取其输出,但该程序使用 java.util.logging.Logger 发送其大部分输出,并且由于某种原因,我的启动应用程序无法读取 Logger 的内容印刷。

基本上我试图像另一个java应用程序的包装器一样构建,因为我想与它交互但无法修改它。

感谢您的帮助。

EDIT

这是代码,但它基本上取自另一个问题,正如我所说,它适用于“正常”标准输出中的内容,但不适用于输出记录器打印到控制台的内容。

package launcher;

import java.io.*;
import java.util.Scanner;

public class Launcher {

    public static void main(String[] args) throws IOException {

        String line;
        Scanner scan = new Scanner(System.in);

        Process process = Runtime.getRuntime().exec("/bin/bash");

        OutputStream stdin = process.getOutputStream();
        InputStream stderr = process.getErrorStream();
        InputStream stdout = process.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));

        while (scan.hasNext()) {
            String input = scan.nextLine();
            if (input.trim().equals("exit")) {

                writer.write("exit\n");
            } else {
                writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n");
            }
            writer.flush();

            line = reader.readLine();
            while (line != null && !line.trim().equals("--EOF--")) {
                System.out.println("Stdout: " + line);
                line = reader.readLine();
            }
            if (line == null) {
                break;
            }
        }

    }
}

如果没有看到任何代码/配置,我猜测要么记录器被配置为写入 stderr (System.err) 而您只读取 stdout (System.out),要么记录器被配置为写入文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Java 进程读取输入流 的相关文章

随机推荐