запись входов терминала в Java

1

Я разрабатываю инструмент для своей школьной лаборатории. В котором Student использует терминал, и я хочу извлечь там входную запись для инструктора (файл журнала). Я знаю файл ввода вывода, и до сих пор мне удалось открыть терминал. Используя это

в данных класса

Process pr;

В функции

String command= "/usr/bin/xterm"; 
Runtime rt = Runtime.getRuntime();  
try {
    pr = rt.exec(command);
} catch (IOException e1) {
    e1.printStackTrace();
} 

и выйти из терминала, я использую (если условие, потому что ученик еще не смог открыть терминал и выйти из системы)

if(pr!=null)
    pr.destroy();

Теперь в области выхода я хочу выйти из терминала и сохранить входной журнал. Нужен какой-то указатель на то, как получить входные данные.

  • 0
    Так у вас на самом деле есть 2 отдельные программы? один, который вы запускаете, когда кто-то входит в систему, который открывает терминал, а другой будет работать, когда пользователь выходит из системы? Из вашего кода ваша переменная pr, кажется, содержит процесс, но я не вижу никакого цикла между этими кодами ... не приведет ли это к тому, что программа запустит терминал и немедленно завершит его? может быть, вы должны опубликовать весь свой код, если он не слишком длинный.
  • 0
    нет, у меня есть графический интерфейс, на котором открыты терминал и кнопки выхода. и я пишу в обработчике событий. Проблемы с нулевым указателем больше нет, я использовал pr в другом объекте и не был статичным.
Теги:

2 ответа

0

Этот вопрос в Unix и Linux дает ответ на ваш вопрос:

Как запустить программу следующим образом:

program > /path/to/file

Это перенаправляет вывод программы в/путь/в/файл мгновенно.

Вы можете добавить аргументы к вызову процесса с помощью execute(String[] cmdarray) с помощью вашей команды и аргументов, поэтому rt.execute(command, ">", "path/to/file");

И если вы хотите получить вывод в своем терминале, а также сохранить его в файл. Как только данные будут в файле, это будет очень легко прочитать из файла.

0

Я не знаю, будет ли это работать или нет, я не могу проверить его сейчас, и очень сложно добавить код в комментарий. обратная связь приветствуется.

попробуйте поместить этот код в свой раздел выхода и посмотреть, что произойдет.

BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));
while ((line = input.readLine()) != null) {
          System.out.println(line);
}
input.close();
  • 0
    он застревает в строке line = input.readLine () (я проверил это, разделив цикл while). Должен ли я сначала уничтожить пр? Если я это сделаю, он не застрянет, но ничего не даст в выводе.
  • 0
    Вы пытались вводить вещи в консоль после ее открытия? что цикл, который я дал, в основном читает выходные данные консоли, но, как я уже сказал, это чистое предположение, все, что я знаю, это то, что код, который я предоставляю, будет работать для определенного процесса, как в моем случае, диспетчера задач для окон , который я извлекаю список активных процессов. Я просто предполагаю, что это МОЖЕТ работать на вашей консоли.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню