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

从java运行交互式命令行应用程序,java,process,Java,Process,我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,对于run和done命令,它工作得很好。例如,这将在工作目录中运行参数为“myArg”的“myProgram”: List<String> commandLine = new ArrayList<String>(); commandLine.add("myProgram"); commandLine.add("myArg"); ProcessBuilder

我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,对于run和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();
List commandLine=new ArrayList();
commandLine.add(“myProgram”);
命令行。添加(“myArg”);
ProcessBuilder=新的ProcessBuilder(命令行);
builder.redirectErrorStream(true);
Process=builder.start();
但是,假设我想运行一个脚本或程序,或者有交互输入的东西(启动后会提示我输入更多)。我可以用与上面类似的代码在Java中实现这一点,还是需要一种不同的方法?或者是否有一些库可以帮助我实现这一点?

根据您的要求,您应该能够重定向输入和输出流。这告诉它从父进程使用
系统。in
/
系统。out

builder.redirectInput(ProcessBuilder.Redirect.INHERIT);
builder.redirectOutput(ProcessBuilder.Redirect.INHERIT);
如果要将内容写入进程的输入:

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


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

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

编写一个简单的.bat文件或shell脚本(调用Java程序并使用“”重定向操作符)是第三种选择


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

我基本上希望强制通过确认提示来执行一个没有--force标志或等效标志的程序。您可以在shell脚本中运行该程序吗?如果“是”,那就足够了吗?@smcg——正如我所说,“这完全取决于你在寻找什么:)”。我只是想确定你有所有的答案。祝你好运真诚地有了标准输入和标准输出,你是指系统输入和系统输出?有了标准输入和标准输出,你是指系统输入和系统输出?谢谢!我已经找了很长一段时间了。我用它(包括重定向错误流)从Java命令行程序启动
/usr/bin/vi
,它的行为完全符合我的期望。