2015-05-29 3 views
0

У меня есть ситуация, когда я ищу свою программу Java для запуска в качестве скрипта BASH, который будет запускать программу на C++.Вывести на C++ программу как вход Java

Я ищу, чтобы выводить вывод программы на С ++ (текстовые строки, напечатанные на терминал) в качестве ввода в программу Java.

Моя первая попытка заключалась в использовании следующего кода для чтения на входе от терминала, но я не был уверен, как его преобразовать с пользовательского ввода, автоматически беря ввод C++.

Console c; 
c = System.console(); 
if (c == null) { 
    System.out.println("No console."); 
    System.exit(1); 
} 
String data = c.readLine(); 

Затем я попытался с помощью InputStreamReader вместе с перенаправляет вывод C++ программе:

Java код:

BufferedReader input = null; 
try { 
    input = new BufferedReader(new InputStreamReader(System.in)); 
    String htmlLine = null; 
    while ((htmlLine = input.readLine()) != null) { 
    System.out.println(htmlLine); 
    } 
} 

Команда для перенаправления вывода:

java -jar program.jar arg1 arg2 arg3 < ./runActivities.sh 

Однако результатом является то, что он просто печатает содержимое runActivities.sh к терминалу.

ответ

4

Похоже, что у вас уже есть код Java и C++. Недостающая часть головоломки кажется перенаправлением оболочки. Вы должны проконсультироваться с руководством, которое вы используете, и посмотреть перенаправление. В случае, если вы используете Баш оболочки Перенаправление должно выглядеть следующим образом:.

$ ./runActivities.sh | java -jar program.jar arg1 arg2 arg3 
+0

Это сработало спасибо! Не думал, что это будет так просто. – Colin747

+0

Да, но вы не можете запустить его из java по запросу –

+0

Мне просто нужно, чтобы он работал при первом запуске. – Colin747

1

Вы можете использовать Runtime.getRuntime() EXEC («yourCommand») функцию от Java, он возвращает объект процесса, который имеет потоки ввода, вывода и err, вы можете использовать эти потоки для отправки и получения данных в Porcess и обратно.

Process p = Runtime.getRuntime().exec("yourCommand"); 
    InputStream is = p.getInputStream(); 
    // you con now read from inputStream, it is the output of your programm in C++ 
+1

Поскольку команда для выполнения - это сценарий оболочки, этот stackoverflow также может быть полезен: http://stackoverflow.com/questions/17142573/java-runtime-exec-to-run-shell-script-cannot-open-file – Matthias

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