从java运行交互式命令行应用程序

时间:2012-09-11 19:53:28

标签: java process

我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,它适用于run-and-done命令。例如,这将在工作目录中运行带有参数“myArg”的“myProgram”:

List<String> commandLine = new ArrayList<String>();
commandLine.add("myProgram");
commandLine.add("myArg");
ProcessBuilder builder = new ProcessBuilder(commandLine);
builder.redirectErrorStream(true);
Process process = builder.start();

然而,说我想运行一个脚本或程序或者具有交互式输入的东西(它在启动后提示我输入更多内容)。我可以使用类似于上面的代码在Java中执行此操作,还是需要不同的方法?或者是否有一些图书馆可以帮助我解决这个问题?

2 个答案:

答案 0 :(得分:5)

根据the documentation,您应该能够重定向输入和输出流。这告诉它使用父进程中的System.in / System.out

builder.redirectInput(ProcessBuilder.Redirect.INHERIT);
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT);

如果你想把事情写入流程的输入:

  

如果源是Redirect.PIPE(初始值),则可以使用Process.getOutputStream()返回的输出流写入子进程的标准输入。如果源设置为任何其他值,则Process.getOutputStream()将返回空输出流。

答案 1 :(得分:0)

重定向stdin和stdout当然是简单命令行程序的一个选项。

如果您确实需要编写击键脚本(例如,在测试脚本中),则使用“robot”类是另一种类:

编写一个简单的.bat文件或shell脚本,调用Java程序并使用“&lt;”和“&gt;”重定向运算符是第三种选择。

这完全取决于你正在寻找的东西:)