OS X で Django のモデルを再読み込みさせるスクリプト

Step1. こんなシェル initialize_db.sh を作成

rm db.sqlite3
python manage.py sql yourappname
expect -c "
spawn python manage.py syncdb
expect Would;    send \"yes\r\"
expect Username; send \"dnalduser\r\"
expect Email;    send \"\r\"
expect Password; send \"donadona\r\"
expect Password; send \"donadona\r\"
interact
"
echo ""

 

Step2. 実行

$  sh initialize_db.sh
...
$ # で、作ってくれます。


参考にしたサイト
1) ほぼ、これを引用。
expect. 対話的なコマンド(telnet,ftp,su等)を自動実行したいとき(Kodama's tips page)

2) 最初は、ヒアドキュメンとでいれようとしのただけど
途中で入力を求めるプログラムに対してシェルスクリプトで対応する... - Yahoo!知恵袋

3) パスワード入力は「標準入力」ではなく「端末」から入力しないといけないということで
expectのエラーNo command 'spawn' found, did you mean: Command 'spawg' from ... - Yahoo!知恵袋

4) あと Xcode エディタ使ってたら、バックスラッシュのいれかたわからず調べた。
http://d.hatena.ne.jp/candinmarruh/20130227/p1

5) interact が抜けていたため、とんでもなく面倒なことに。
http://q.hatena.ne.jp/1405445285:titile

6) じつは expect で記述したほうが安全なのかな...。
シェル以外からexpectしててハマったメモ | ブログ :: Web notes.log
expectでinteractは危険なのでexpectを使う - 揮発性のメモ