Может ли кто-нибудь помочь мне в следующем сценарии,
Мне нужно вызвать Perl-скрипт из моего Java-кода.Скрипт perl - это интерактивный код, который получает ввод от пользователя во время его выполнения и продолжается до конца.Итак, пример, который я использовал, заключается в том, что скрипт perl при выполнении запрашивает возраст, печатая в консоли «Сколько вам лет?», Когда пользователь вводит какое-то значение, скажем «26».Затем выводится «ВАУ! Тебе 26 лет!».
Когда я попытался вызвать этот скрипт из своего кода Java, процесс ждет, пока я не передам значение как 26 в выходном потоке, а во входном потоке естьне имеет значения.Затем, наконец, когда я снова читаю входной поток, я получаю весь вывод сценария вместе.Итак, я не могу сделать его интерактивным?
Я просмотрел много форумов и блогов, но не смог найти ни одного, который бы точно соответствовал моим требованиям.
Вот код Java
import java.io.*;
public class InvokePerlScript {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Process process;
try
{
process = Runtime.getRuntime().exec("cmd /c perl D:\\sudarsan\\eclips~1\\FirstProject\\Command.pl");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
out.write("23");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
process.waitFor();
if(process.exitValue() == 0)
{
System.out.println("Command Successful");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
else
{
System.out.println("Command Failure");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(process.getErrorStream()));
String line = null;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
catch(Exception e)
{
System.out.println("Exception: "+ e.toString());
}
}
}
Код Perl:
$| = 1;
print "How old are you? \n";
$age = <>;
print "WOW! You are $age years old!";
Заранее спасибо, Сударсан