java - 从 Java 调用 "interactive"Perl 脚本

标签 java perl

我想从 Java 程序调用“交互式”Perl 脚本。只是为了清楚起见,相反的方式(从 Perl 到 Java)对我来说并不好。

该脚本是交互式的,因为它需要与用户进行小型配置对话。例如,在 cmd.exe 中调用脚本将导致出现如下对话框:

您想覆盖旧设置吗? [是,否(默认=否)]

用户应该在命令行中选择是写"is"、“否”还是什么都不写。 根据用户的选择,会出现另一条消息:“你想......”,用户会做出回应等等。我想你已经明白了。

我的问题是当在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();

关于java - 从 Java 调用 "interactive"Perl 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784789/

相关文章:

java - 线程中出现异常 "AWT-EventQueue-0"java.lang.NullPointerException JInternalFrame 关闭方法

perl - VIM 7.2 `:perldo` 和多个表达式的脚本问题

regex - 如何匹配以换行符或逗号开头的字符串?

Perl:2GB 后的索引/rindex?

Perl CGI 持久性 cookie

java - JTable 行标题实现

java - 在 Java 的 HTMLUnit 中使用非标准接口(interface)时 SSL 验证失败

java - 为什么我可以给 Integer 的 MAX_VALUE 加 1?

java - spring-boot-starter-data-jpa@ManyToMany 集合未填充

regex - Perl 正则表达式导致编译错误