我想从Java程序中调用“交互式”Perl脚本。只是为了清晰起见,反之(从Perl到Java)对我来说并不好。
该脚本是交互式的,因为它需要与用户进行小型配置对话。例如,在cmd.exe中调用脚本会导致出现如下对话框:
您要覆盖旧设置吗? [是,否(默认=否)]
并且用户应该在命令行中选择是,否或什么也不做。 根据用户的选择,会出现另一条消息:“你想......”,用户会回复等等。我想你已经得到了照片。
我的问题是,在Java程序中调用脚本时,如何与用户进行相同的对话?我的意思是,如何向用户捕获脚本的问题,向用户显示,然后将用户的答案(在Java程序中得到)发送到脚本?
在这种情况下,一个简单的Runtime.getRuntime()。exec()不起作用。
希望我表达了足够明确的问题。
感谢您的帮助!
答案 0 :(得分:4)
您必须使用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();
答案 1 :(得分:0)
答案 2 :(得分:-1)
如果(1)您的调用是从Java到Perl,(2)您没有解析Perl脚本本身,为什么不使用Java代码中的JOptionPane.showConfirmDialog()?如果从脚本中获得“是/否”,那应该不是什么大问题。无论您要打印到用户显示什么,都可以作为纯ASCII文本包含在该确认对话框中。