вторник, 23 августа 2011 г.

Полезное приложение expect (Linux)

Понадобилось автоматизировать процесс развертывания свежей версии веб-приложения на Django из SVN-репозитария.

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

Рассмотрим подробнее - необходимо выполнить:

django-admin.py flush --pythonpath . --settings settings

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

Как организовать эмуляцию ввода?

echo yes|django-admin.py flush --pythonpath . --settings settings

А как быть с вводом нескольких строк?

django-admin.py flush --pythonpath . --settings settings << EOF
yes
yes
admin
...
password
EOF

Все хорошо, да вот пароль так ввести не получится.

Выход? Правильно - expect!

Создаем следующий скрипт flush.exp:

spawn django-admin.py flush --pythonpath . --settings settings
expect continue { send yes\r }
expect create { send yes\r }
...
expect Password { send password\r }
expect again { send password\r }
close

Все! Теперь осталось выполнить:

expect -f flush.exp

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

2 комментария:

  1. Попробуй fabric http://docs.fabfile.org/en/1.2.2/index.html

    ОтветитьУдалить
  2. Посмотрел доки - выглядит обещающе - попробую, спасибо.

    ОтветитьУдалить