簡體   English   中英

從Java進程讀取InputStream

[英]Reading InputStream from Java Process

我試圖打開一個終端控制台,並能夠讀取/寫入命令。

我讀了一些問題,例如: 具有輸入/輸出流的Java流程

有了這個功能,就可以構建一個小的應用程序,該應用程序可以打開終端並將命令傳遞到控制台並將結果打印回去,從而可以與任何系統命令(例如瀏覽文件夾,刪除文件和類似內容)一起很好地工作。

我的問題是我需要從該控制台加載另一個Java程序並讀取其輸出,但是該程序使用java.util.logging.Logger發送其大部分輸出,並且由於某種原因,我的啟動應用無法讀取什么Logger打印。

基本上,我試圖為另一個Java應用程序構建一個包裝器,因為我想與之交互但不能對其進行修改。

謝謝你的幫助。

編輯

這是代碼,但是它基本上來自另一個問題,正如我所說的,它適用於“普通”標准輸出中的內容,但不適用於Logger打印到控制台的輸出。

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),否則記錄器已配置為寫入文件。

根據dty的回答,我認為默認情況下java.util.logging使用stderr,因此您應該像這樣將stderr重定向到stdout:

ProcessBuilder builder = new ProcessBuilder("ls", "-l"); // or whatever your command is
builder.redirectErrorStream(true);
Process proc = builder.start();

以我的經驗,FWIW最好通過在自己的程序中啟動其main方法來嘗試使用其他Java程序,而不是嘗試與輸入/輸出流等搏斗,但這要取決於其他程序的工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM