2015-02-26 2 views
0

Я хочу загрузить программу с консоли и затем выполнить команды на ней позже. Загрузка работает отлично, но как я могу выполнять команды в загруженной программе, не запуская ее каждый раз, когда я хочу ее использовать?Java выполняет несколько консольных команд в загруженной программе

Например: ./randomapp command1 command2

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

+0

program -> program – RickyA

+0

Если вы можете выполнить команду, переданную как аргумент командной строки, вы можете прочитать команду из стандартного ввода/Консоли и выполнить ее. В чем проблема? – laune

+0

Я хочу использовать среду выполнения для загрузки программы с использованием ./startprogram. Затем я хочу использовать другое время выполнения где-нибудь позже, чтобы выполнить команду программ из новой среды выполнения. Но проблема в том, что программа больше не загружается из другой среды выполнения, например, когда я запускаю ее с консоли. – Broadwell

ответ

0

Не зная ничего о вашей программе Java или приложении, которое вы хотите выполнить и подаете с помощью команд, это выстрел в темноте. Кроме того, вся обработка ошибок опущена. Я использую tee для запуска программы, потому что это удобно.

public class Command { 
    private static OutputStream os; 
    private static OutputStreamWriter osw; 
    private static Process process; 
    public static void start(){ 
     try { 
      ProcessBuilder pb = new ProcessBuilder("/usr/bin/tee", "x.dat"); 
      process = pb.start(); 
      os = process.getOutputStream(); 
      osw = new OutputStreamWriter(os); 
     } catch(Exception e){ 
      // error handling 
     } catch(Error e){ 
      // error handling 
     } 
    } 

    public static void terminate() throws Exception { 
     process.waitFor(); 
    } 

    public static void command(String str) throws Exception { 
     String cmd = str + System.lineSeparator(); 
     osw.write(cmd, 0, cmd.length()); 
     osw.flush(); 
    } 

Я проверил это с помощью:

Command.start(); 
Command.command("line 1"); 
Thread.sleep(2000); 
Command.command("line 2"); 
Thread.sleep(2000); 
Command.command("line 3"); 
Command.terminate(); 

Линии могут быть найдены на x.dat.

+0

Спасибо, это отлично работает для моих нужд :) – Broadwell

+0

Как я могу разобрать возврат консоли? – Broadwell

+0

Вы можете получить process.getInputStream(), предоставляющий стандартный вывод приложения. И вы можете начать или продолжить чтение после написания другой команды. НО: знаете ли вы, сколько строк ожидать? – laune

Смежные вопросы