Понадобилось автоматизировать процесс развертывания свежей версии веб-приложения на Django из SVN-репозитария.
Все в принципе просто - необходимо просто перечислить команды одна за другой в скрипте на shell, но один момент все же есть - эмуляция ввода.
Рассмотрим подробнее - необходимо выполнить:
В ходе выполнения приложение запрашивает согласие на уничтожение всех данных, а также на создание пользователя-администратора.
Как организовать эмуляцию ввода?
А как быть с вводом нескольких строк?
Все хорошо, да вот пароль так ввести не получится.
Выход? Правильно - expect!
Создаем следующий скрипт flush.exp:
Все! Теперь осталось выполнить:
О назначении команд скрипта догадаться не сложно, на этом все.
Все в принципе просто - необходимо просто перечислить команды одна за другой в скрипте на 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
О назначении команд скрипта догадаться не сложно, на этом все.