0

我正在编写一个 java 程序,它将在 Linux Ubuntu 操作系统上运行一些已安装的工具,我需要在同一进程中执行两个连续的命令,但要使第一个命令完全执行,然后调用第二个命令。我曾尝试使用“\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();

    }
}
4

1 回答 1

0

我不认为它可以做到:

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

启动2个进程不是更容易吗?

旁注:您不应该一个接一个地读取 out 和 err 流,您应该在单独的线程中并行读取它们,或者更容易使用,ProcessBuilder#redirectErrorStream因此您只需要从一个流(out)中读取。

于 2013-06-03T10:45:30.827 回答