2013-12-11 2 views
0

В принципе, я пытаюсь открыть окно терминала и запустить его, чтобы запустить php-скрипт.
Также возможность ввода и получения вывода сразу же, когда сценарий выводит новую строку на терминал. Если возможно, я планирую сделать это hidden.Откройте окно независимого терминала и выполните команду с Java

Больше как зеркальное отображение ввод и вывод из терминала в Java приложение само

Я сделал

Runtime.getRuntime().exec("/usr/bin/open -a Terminal ~/Desktop/test.php"); //mac 

Я понятия не имею, как вводить и получить выход сразу после того, как сценарий PHP посылает выходной к терминалу.

Пожалуйста, помогите мне здесь

+1

Общие советы: 1) Чтение (и осуществлять) * все * рекомендации [Когда Runtime.exec() не будет] (http://www.javaworld.com/jw-12-2000/ JW-1229-traps.html). Это может решить проблему. Если нет, он должен предоставить дополнительную информацию о причине отказа. Затем проигнорируйте, что он ссылается на 'exec' и создает' Process' с помощью 'ProcessBuilder'. Также разбивайте 'String arg' на' String [] args' для учета аргументов, которые сами содержат пробелы. 2) Задайте вопрос. –

+0

@AndrewThompson, если скрипт запрашивал больше ввода, как бы я это сделал? – junyi00

+0

Не уверен в этом, но посмотрите на потоки ввода-вывода, предлагаемые «Процессом». –

ответ

0

создать процесс и читать входной поток процесса.

(Javadoc) getInputStream()

Получает входной поток подпроцесса. Поток получает данные, поступающие из стандартного выходного потока процесса, представленного этим объектом Process.

//-->check command line<-- 
Process process = Runtime.getRuntime().exec("/usr/bin/php /home/amit/hello.php"); 
BufferedInputStream iStream = new BufferedInputStream(process.getInputStream()); 
BufferedOutputStream oStream = new BufferedOutputStream(process.getOutputStream()); 

byte[] buffer = new byte[1024]; 
while (true){ 
    int length = iStream.read(buffer); 
    if(length == -1) 
     break; 
    System.out.println(new String(buffer, 0, length)); 
} 

Примечание: написано относительно Linux.

+0

Я попробовал 'System.out.println (stream.read());' но чем работает скрипт, ничего не печатает на исходном терминале? – junyi00

+0

Вы должны использовать [ProcessBuilder] (http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html), а не Runtime.exec. См. Комментарий Эндрю Томсона к вопросу, чтобы увидеть ссылку, почему вы не должны использовать Runtime.exec. – linski

0

Вместо выполнения php-скрипта в терминале, который по очереди использует php для выполнения скрипта, просто выполните php-скрипт в php и запишите вход/выход.

$ which php 
/usr/bin/php 
Смежные вопросы