从java运行交互式命令行应用程序
我通常使用java.lang.ProcessBuilder和java.lang.Process来运行外部命令行程序,对于run和done命令,它工作得很好。例如,这将在工作目录中运行参数为“myArg”的“myProgram”:从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
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”类是另一种方法:
这完全取决于您所要查找的内容:)我基本上希望强制通过确认提示来执行一个没有--force标志或等效标志的程序。您可以在shell脚本中运行该程序吗?如果“是”,那就足够了吗?@smcg——正如我所说,“这完全取决于你在寻找什么:)”。我只是想确定你有所有的答案。祝你好运真诚地有了标准输入和标准输出,你是指系统输入和系统输出?有了标准输入和标准输出,你是指系统输入和系统输出?谢谢!我已经找了很长一段时间了。我用它(包括重定向错误流)从Java命令行程序启动
/usr/bin/vi
,它的行为完全符合我的期望。