2013-06-03 270 views
0

我寫這將在Linux的Ubuntu操作系統上運行一些安裝工具Java程序的輸入按鍵到命令行,我需要在相同的方法,只是使執行兩個連續命令第一個完全執行,然後調用第二個。我曾嘗試使用「\ n」來分隔兩個命令,如下面的代碼所示,但它不起作用。如何通過從Java應用程序

public static void main (String args[]) 
{ 
    List<String> command = new ArrayList<String>(); 
    command.add("spin"); 
    command.add("-p"); 
    command.add("-u100"); 
    command.add("D:\\promela\\peterson.pml"); 
    command.add("\n"); 
    command.add("cc -o pan pan.c"); 
    command.add("./pan"); 


    String[] commandArray = command.toArray(new String[command.size()]); 
    ProcessBuilder pb = new ProcessBuilder(commandArray); 
    Process process; 
    try { 

      process = pb.start(); 

      BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); 
      BufferedReader errReader = new BufferedReader(new InputStreamReader(process.getErrorStream())); 
      String errline, outline; 


      for(String s : command) 
      { 
      System.out.println(s + " "); 
      } 

      while ((outline = br.readLine()) != null) 
      { 
      System.out.println(outline); 
      } 

      while ((errline = errReader.readLine()) != null) 
      { 
       System.err.println(errline); 
      } 


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

    } 
} 
+0

@MarcoForberg沒有,我怎麼可以通過CTRL +從Java進入? – Sami

+0

啊忘了吧。錯了。以爲你需要在從控制檯讀取時通過輸入。 –

回答

0

我不認爲這是可以做到:

  • 要麼你啓動一個終端/主機/ bash進程,在其中您可以在「類型」命令,或
  • 您推出特定的可執行文件無法解析這些命令,它將無法工作。

那豈不是更容易啓動2個進程?注意:你不應該一個接一個地讀出out和err流,你應該在不同的線程中並行讀取它們,或者更容易地使用ProcessBuilder#redirectErrorStream,所以你只需要從一個流中讀出(out)。

+0

此代碼將在服務器上運行,因此無法鍵入;它應該是自動的。回覆。啓動2個進程,這兩個命令相互跟隨;第一個生成一些C代碼,然後可以用於第二個命令..有沒有其他的選擇做這種事情?謝謝你的附註。 – Sami

+1

@Sam通過「類型」我的意思是從你的Java代碼發送密鑰到過程的輸出流。什麼阻止你在一個進程中生成你的c代碼,等到該進程完成(用'waitFor()'),然後啓動第二個進程來執行你的第二個命令? – assylias

+1

謝謝..如果我沒有得到它的錯誤,我想要的是你的答案中的第一個選項。它可能會啓動另一個進程,但我嘗試了另一個修復工作(它可能類似於啓動另一個進程);那就是重構我代表命令的方式,以便我可以識別每個單獨的一個,比如'spin -p -u10 xyz.pml',並多次啓動該進程,每次都使用新命令 – Sami

相關問題