我想从 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/