繁体   English   中英

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

[英]run interactive command line application from java

我通常使用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中执行此操作,还是需要其他方法? 还是有一些图书馆可以帮助我呢?

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

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

如果要将内容写到流程的输入中:

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

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

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

编写一个简单的.bat文件或Shell脚本来调用Java程序并使用“ <”和“>”重定向操作符,这是第三个选择。

这完全取决于您要寻找的内容:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM