java processbuilder中的多个命令

时间:2014-05-17 04:36:16

标签: java processbuilder

我正在尝试通过在进程builder中使用多个命令来创建.smv文件的XML文件。我可以以这样的方式向进程构建器发出命令,即输出第一个命令和下一个命令生成下一个输出

 Process p = null;

 ProcessBuilder pb = new ProcessBuilder("nusmv","-int", "D:/files/bitshift.smv");

            p = pb.start();

            InputStream in = null;
            OutputStream outS = null;

            StringBuffer commandResult = new StringBuffer();
            String line = null;
            int readInt;

            int returnVal = p.waitFor();

            in = p.getInputStream();

            while ((readInt = in.read()) != -1)
                {commandResult.append((char)readInt);
            outS = (BufferedOutputStream) p.getOutputStream();
            outS.write("Process_model".getBytes());
            outS.write("show_traces -p 4 -o D:/output.xml".getBytes());}
            outS.close();

            System.out.println(commandResult.toString());
            in.close();

我该怎么做才能解决我的问题?

2 个答案:

答案 0 :(得分:0)

  

如何以第一个命令和下一个命令的输出生成下一个输出的方式向进程构建器发出命令

如果您的意思是如何将命令组合在一起,请让ProcessBuilder启动命令shell,并使用shell语法将命令组合在一起。

答案 1 :(得分:0)

创建批处理文件并从Java调用批处理文件更简单,但是如果必须......

示例:链接两个命令,如

    c:\>dir | find "DIR"

dir 的输出传输到查找

这是在Java中执行上述操作的示例。这个例子简单地写了 最终输出到文件,但您可以像现有代码一样使用流阅读器。调整, 根据需要添加错误检查,异常处理和优化。 (不要写 要在生产应用程序中使用root dir,请使用用户temp)。

    final ProcessBuilder processBuilder1 = new ProcessBuilder("cmd.exe", "/c", "dir", "c:\\");
    final ProcessBuilder processBuilder2 = new ProcessBuilder("cmd.exe", "/c", "find", "\"DIR\"");
    processBuilder1.redirectOutput(Redirect.to(new File("c:\\tmp1.tmp")));
    final Process process1 = processBuilder1.start();
    process1.waitFor();
    processBuilder2.redirectInput(Redirect.from(new File("c:\\tmp1.tmp")));
    processBuilder2.redirectOutput(Redirect.to(new File("c:\\tmp2.tmp")));
    final Process process2 = processBuilder2.start();
    process2.waitFor();

Restults:

tmp1.tmp

 04/02/2014  09:42 PM                 0 HaxLogs.log
 04/02/2013  12:42 AM                 0 lock
 04/02/2014  03:42 PM    <DIR>          mfg42

tmp2.tmp

 04/02/2014  03:42 PM    <DIR>          mfg42