2013-06-03 138 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

相关问题