簡體   English   中英

Java運行的Bash實時輸出

[英]Bash real time output from java run

我有以下bash腳本example.sh,其中包含一些代碼行。要重現我需要的內容,可以說腳本中有以下幾行:

#!/bin/bash
echo First part of program
sleep 3
echo Second part of program

因此,當我直接從終端運行此程序時,我將第一部分打印到屏幕上(程序的第一部分),然后等待3秒鍾,然后我在屏幕上得到第二部分(程序的第二部分)。 當我在Java中運行此代碼時,我將執行scipt,等待3秒鍾,然后在屏幕上同時打印兩個部分。 有沒有一種方法可以從終端運行時獲得相同的效果?

編輯! 這是我的代碼:

 public void executeCommand(String command) {
    String line;
        StringBuffer output = new StringBuffer();
        Process p;

    try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
        line = "";           
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }
        setOutput(output.toString());
        output = new StringBuffer();
        BufferedReader error = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        line="";
        while ((line = error.readLine())!= null) {
            output.append(line + "\n");
        }
        setError(output.toString());

    } catch (Exception e) {
        e.printStackTrace();
    }
}

如果使用Process -Class啟動腳本,則可以使用以下命令獲取腳本的輸出:

ProcessBuilder pb = new ProcessBuilder("<bashname>", "<scriptpath>");    
Process p = pb.start();
OutputStream ops = p.getOutputStream();

必須立即有輸出。

解決:使用以下命令將輸出和錯誤重定向到文件中:

ProcessBuilder builder = new ProcessBuilder("sh",command);
builder.redirectOutput(new File("out.txt"));
builder.redirectError(new File("err.txt"));
try{
     Process p = builder.start();
}catch(IOException e){
     e.printStackTrace();
}

暫無
暫無

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

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