2016-03-01 5 views
1

У меня есть приложение Rails и я пытаюсь связаться с программой Java через CLI.Взаимодействие командной строки с использованием Ruby

Когда я запускаю код Java с помощью system: «Ваш возраст»

system "java askQuestion" 

это приглашение для ввода пользователя и ждет ответа, например,

Я хочу передать значение из переменной и захватить вывод.

Как я могу взаимодействовать с CLI и запускать команду?

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

Решение: IO.popen

обновление -> я нашел вот что именно я хочу и поделиться, возможно, помочь кому-то еще тоже http://ruby.bastardsbook.com/chapters/external-programs/

+0

Нам нужна дополнительная информация. Сколько входов потребует код Java до его обработки? Можете ли вы подключить к нему вход из STDIN? Может ли он читать ответы из файла? Вы говорите, что вы проводили исследования, но вы не говорите нам, где вы искали, и почему это не помогло, что нам не помогает; Скажите нам, где вы искали, почему они не сделали ничего хорошего, поэтому мы не повторяем ваши шаги. Я настоятельно рекомендую прочитать «[ask]», включая все ссылки в нижней части страницы, так как ваш вопрос слишком широк и не хватает деталей. –

+0

Вы пробовали выкрикивать в консоли «rails»? Это похоже на то, что вы описываете. http://edgeguides.rubyonrails.org/command_line.html#rails-console (BTW - Это может быть очень сложно, когда вы так новичок в языке, на котором вы даже не знакомы с условиями поиска. что :).) – Jaime

+0

Спасибо, я проверю «Как спросить». Мне удается достичь того, что я хочу сделать, используя «IO.popen». Я добавил решение для своего сообщения. –

ответ

0

Kernel#system просто выполняет команду в субоболочке, возвратившись результат (true/false) начала процесса.

Чтобы поймать выход, используйте backticks (or %x||).

Для взаимодействия с оболочкой, можно было бы использовать IO#popen, но в вашем случае я бы просто придерживаться выполнения

output = `echo 37 | java askQuestion` 

выше будет проходить выход echo (37 в данном случае) в Java обработать. Ответ Java-процесса будет сохранен в переменной output.

+0

Я пробовал этот вывод = 'java askQuestion | "37", но он дает эту ошибку "sh: 1: '37' not found". –

+5

Почему на Земле вы пытались бы вывести выход из java в '37', а не наоборот? – mudasobwa

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