从Java调用“交互式”Perl脚本
我想从Java程序中调用“交互式”Perl脚本。 只是为了清晰起见,反过来(从Perl到Java)对我来说并不好。
该脚本是交互式的,因为它需要与用户进行小型配置对话。 例如,在cmd.exe中调用脚本会导致如下对话框:
要覆盖旧设置吗? [是,否(默认=否)]
并且用户应该在命令行中选择是,否或根本不写。 根据用户的选择,会出现另一条消息:“你想……”,用户会回复等等。我想你已经得到了图片。
我的问题是,当在Java程序中调用脚本时,如何与用户进行相同的对话? 我的意思是,如何将脚本的问题捕获给用户,向用户显示,然后将用户的答案(在Java程序中获取)发送到脚本?
在这种情况下,一个简单的Runtime.getRuntime()。exec()不起作用。
希望我能够表达清楚的问题。
感谢您的帮助!
您必须使用getInputStream / getOutputStream方法来访问perl stript的stdin和stdout。 您可以读取和写入这些流来模拟用户的行为
OutputStream stdin = null; InputStream stderr = null; InputStream stdout = null; Process process = Runtime.getRuntime ().exec ("..."); stdin = process.getOutputStream (); stderr = process.getErrorStream (); stdout = process.getInputStream (); // "write" the parms into stdin String line = "data\n"; stdin.write(line.getBytes()); stdin.flush(); stdin.close(); // clean up if any output in stdout BufferedReader brCleanUp = new BufferedReader (new InputStreamReader (stdout)); while ((line = brCleanUp.readLine ()) != null) { //System.out.println ("[Stdout] " + line); } brCleanUp.close(); // clean up if any output in stderr brCleanUp = new BufferedReader (new InputStreamReader (stderr)); while ((line = brCleanUp.readLine ()) != null) { //System.out.println ("[Stderr] " + line); } brCleanUp.close();
这是Expect的工作。 在Java中: ExpectJ , expect4j
如果(1)您的调用是从Java到Perl,以及(2)您没有解析Perl脚本本身,为什么不使用Java代码中的JOptionPane.showConfirmDialog()? 如果从脚本中获得“是/否”,那应该不是什么大问题。 无论您要打印到用户显示什么,都可以作为纯ASCII文本包含在该确认对话框中。
- 访问修饰符的目的是什么?
- 如何在MainActivity.java中创建简单的HTTP请求? (Android Studio)
- 在Microsoft IIS 7中部署War文件
- “架构中立”和“便携式”之间有什么区别?
- org.springframework.web.util.NestedServletException:请求处理失败; 嵌套exception是REST with Spring中的java.lang.NullPointerException
- Apache Maven Assembly Plugin不支持OSGi捆绑包
- 如何在Eclipse中添加JBoss服务器?
- 更改DefaultMutableTreeNode的文本样式
- 如何在maven中配置checkstyle?