Извините за этот странный заголовок ...
У меня следующая ситуация: я хочу, чтобы моя Java-программа взаимодействовала с внешней консолью.Чтобы «отправить» отдельные команды на эту консоль, мне нужно смоделировать то, что будет «нажатием клавиши ввода» на обычной консоли.Чтобы прояснить, что я хочу, представьте, что у mysql нет другого API, и мне нужно будет взаимодействовать через консоль.Хотя это не моя настоящая проблема, она достаточно близка.
У меня есть следующий код:
String command = "/usr/local/mysql/bin/mysql";
Process child = Runtime.getRuntime().exec(command);
StreamGobbler gobbler = new StreamGobbler(child.getInputStream());
gobbler.start();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(child.getOutputStream()));
out.write("help");
// here enter key needs to be pressed
out.flush();
// out.close();
Если выполняется вызов out.close()
, все в порядке.Но, конечно, таким образом я могу отправить только одну команду, а это не то, что я хочу.Но если out.close()
опущено, другая программа никогда не выполнит команду.Я предполагаю, что он по-прежнему ожидает команды «финишировать», что на обычной консоли будет сделано нажатием клавиши ввода.out.write(System.getProperty("line.separator"));
и out.newLine();
(которые одинаковы) не решают проблему, равно как и out.write("\r\n");
и out.write((char) 26);
(EOF).
Конечно, возможно, я это делаюсовершенно неправильно (то есть, неправильный подход).Тогда я был бы признателен за указатель в правильном направлении ...
Любая помощь по этому вопросу высоко ценится.