[英]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.