如何将enter键按下来从java应用程序命令行

时间:2013-06-03 10:37:21

标签: java command-line process

我正在编写一个java程序,它将在Linux Ubuntu OS上运行一些已安装的工具,我需要在同一个进程中执行两个连续的命令,但是让第一个完全执行,然后调用第二个。我尝试使用“\ n”来分隔这两个命令,如下面的代码所示,但它没有用。

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();

    }
}

1 个答案:

答案 0 :(得分:0)

我认为不能这样做:

  • 启动终端/控制台/ bash进程,您可以在其中“键入”命令,或
  • 您启动了一个无法解析这些命令的特定可执行文件,但它无法正常工作。

启动2个流程会不会更容易?

附注:你不应该一个接一个地读出out和err流,你应该在不同的线程中并行读取它们,或者更容易,使用ProcessBuilder#redirectErrorStream所以你只需要读取一个流(出)。