[英]Not able to run specific terminal commands from java program(Eclipse)
在JAVA中使用ProcessBuilder我能夠運行簡單的終端命令,如ls,pwd,echo等等......但是下面的代碼被終止,不知道為什么?
public static void main(String[] args) throws Exception
{
Runtime r = Runtime.getRuntime();
Process p = r.exec("echo 'T W O N E I G H T' | /home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini");
p.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = b.readLine()) != null)
{
System.out.println(line);
}
}
此命令在終端上運行良好,大約需要15秒才能運行並提供輸出。 我在stackoverflow上經歷了類似的主題,但沒有找到任何幫助。 請幫忙。 提前致謝。
請參考此代碼,這可能有助於你....使用bash。只需用echo命令替換你的命令
ProcessBuilder b = new ProcessBuilder(“bash”,“ - c”,“echo abc”);
Process termProc = null;
try {
termProc = b.start();
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(termProc.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(termProc.getErrorStream()));
String s = null;
while ((s = stdInput.readLine()) != null)
{
System.out.println(s);
}
while ((s = stdError.readLine()) != null)
{
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
考慮監視InputStream和ErrorStream。 有可能輸出可能被寫入ErrorStream,這就是為什么你沒有看到任何顯示的東西。
以下是 Javaworld關於Runtime.exec()的一些常見缺陷以及如何使用它的一個很好的例子 。
由於某些本機平台僅為標准輸入和輸出流提供有限的緩沖區大小,因此無法及時寫入輸入流或讀取子進程的輸出流可能導致子進程阻塞甚至死鎖。
考慮按以下方式更新代碼:
public static void main(String[] args) throws Exception { Runtime r = Runtime.getRuntime(); Process p = r.exec("echo 'TWONEIGHT' | /home/saj/g2p/mosesdecoder-master/bin/moses -f /home/saj/g2p/working/binarised-model/moses.ini"); BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream())); String line = ""; while ((line = b.readLine()) != null) { System.out.println(line); } BufferedReader b = new BufferedReader(new InputStreamReader(p.getErrorStream())); String line = ""; while ((line = b.readLine()) != null) { System.out.println(line); } p.waitFor(); }
注意:我建議創建線程來處理輸入來自inputstream和errorstream的輸出,如我在上面發布的示例鏈接中所示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.