Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > *NIX системы: Общие вопросы > Имитация ввода Enter


Автор: batigoal 6.12.2005, 10:15
Подскажите, пожалуйста, в таком вопросе.

Начал читать книгу по UNIX-системам. Там говориться о том, что можно "скормить" программе, требующей ручного ввода, данные из файла с помощью операции < . Попробовал, но столкнулся с такой проблемой: вводится весь файл целиком, а хотелось бы, чтобы он подавался на вход по мере надобности. Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д.

Или я не в ту сторону думаю, и данной операцией проблему не решить?

Автор: cenix 6.12.2005, 12:50
Операции <, > просто позволяют перенаправить стандартные потоки туда куда надо тебе, например из файла не на экран, а в поток ввода другой проги. Если ты хочешь читать по одной строчке, ты должен это сам делать, насколько я знаю так как ты хочешь( Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д.) нельзя сделать автоматом.

Автор: Шмель 6.12.2005, 12:54
Цитата(cenix @ 6.12.2005, 18:50)
нельзя сделать автоматом.

можно

Lamer George, тебе нужен http://expect.nist.gov/
к сожалению, сам я им не пользовался, но доподлинно известно, что предназначен он именно для таких нужд smile




Автор: batigoal 6.12.2005, 14:00
Шмель
Спасибо, обязательно попробую.

А можно ли сделать то же самое из shell-скрипта? Как я понял, Expect использует свой язык и компилятор (Tcl), хотя и довольно легкий. Учить два языка одновремено будет тяжеловато smile

Автор: cenix 7.12.2005, 12:47
Шмель
Цитата

Цитата (cenix @ 6.12.2005, 18:50)
нельзя сделать автоматом.

можно

Lamer George, тебе нужен Expect

я говорю, что нельзя стандартными командами никсов это сделать, а если уж юзать как ты говоришь Tcl, то можно с тем же успехом считывать по строчке на с, благо gcc обычно всегда есть smile

Автор: Шмель 19.12.2005, 15:14
Только что в новостях на ЛОРе наткнулся на упоминание об еще одной интересной утилите, предназначенной для замены Expect. Называется она http://empty.sourceforge.net/

Автор: batigoal 19.12.2005, 15:20
Цитата
Только что в новостях на ЛОРе наткнулся на упоминание об еще одной интересной утилите, предназначенной для замены Expect. Называется она empty

Похоже, она попроще. Просто тот вариант я отложил на попозже, потому что он требовал установки TCL.

Автор: Alexandr87 22.12.2005, 16:04
Если программа выводит предложения на ввод в стандартный выходной поток, то можно попробовать использовать файл - через который будет веститься диалог.

./MyScript | program >> dialogFile

В MyScript

Можно вставить бесконечный цикл, в котором программа дописывает разделитель (любое число, которое с большой долей вероятности не встретиться в выводе программы program).
После, того как разделитель дописан, он (скрипт) выбрасывает в свой выходной поток нужные символы,
после чего организуем еще один бесконечный цикл (или накладываем условие, какое будет ясно ниже). В данном цыкле усыпляем программу на несколько секунд, читаем последнюю строку файла-диалога (tail -n 1 dialogFile). Если она не равна нашему разделителю, то прерываем цикл break, предвариельно при необходимости записав вывод программы program. Таким образом, мы попадаем в первый бесконечный цикл, где уже можем анализировать полученное от программы сообщение.

Чисто теоретически должно работать. Причем всё средсвами bash'а

Автор: batigoal 22.12.2005, 16:32
Увы, выполняемый скрипт изменять нельзя. Собственно, конкретная задача - автоматизировать процесс установки билда на серверах, чтобы можно было запускать его автоматом по ночам. Установка крепко интеракивная, требуется вводить много конфигурационных параметров.

Автор: bilbobagginz 22.12.2005, 18:44
Lamer George, если билды неудобны для автоматизации, то нужно иг изменять а не извращаться.
билд он для того и билд, чтобы получать строку с параметрами.

можешь привести пример того что нужно сделать ?

( желательно с примерами вывода. )

еще направление: возможно билды всего-то что и делают - создают конфигурационные файлы с параметрами... так может тебе скрипт такой автоматицццссский написать самому ... ?

Автор: batigoal 22.12.2005, 23:05
Менять его нельзя, потому что именно в таком виде он доставляется кастомерам. Мы должны иметь одинаковые платформы.

Цитата(bilbobagginz @ 22.12.2005, 19:44)
можешь привести пример того что нужно сделать ?

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

Примеры вывода:

Цитата
Select your timezone: <юзер вводит номер таймзоны и жмет Enter>
Select menu item: <юзер вводит номер пункта меню и жмет Enter, происходит копирование файлов>
Do you want to configure the installed module: <юзер вводит y или n и жмет Enter>

и т.д.

Цитата(bilbobagginz @ 22.12.2005, 19:44)
возможно билды всего-то что и делают - создают конфигурационные файлы с параметрами

Нет, они еще и непосредственный деплоймент разворачивают. К тому же, просто файлы не подменить - их очень много, и они меняются со временем. Проще через имитацию ввода сделать.

Вроде empty - это то, что нужно. Я даже сумел ее поставить, для меня это немало smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)