10

我通常使用 java.lang.ProcessBuilder 和 java.lang.Process 来运行外部命令行程序,它适用于运行并完成的命令。例如,这将在工作目录中运行带有参数“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 中使用与上述类似的代码来做到这一点,还是需要不同的方法?还是有一些图书馆可以帮助我解决这个问题?

4

2 回答 2

6

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

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

如果您想将内容写入进程的输入:

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

于 2012-09-11T19:59:19.117 回答
0

重定向标准输入和标准输出无疑是简单命令行程序的一种选择。

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

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

这完全取决于你在寻找什么:)

于 2012-09-11T20:06:43.310 回答