人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Django の syncdb を expect で自動化しようとしたのですが、何故か admin user が作成されません。


何か、思い当たる原因がありましたら、ご教示いただけないでしょうか?なお OS は Mac になります。

---
mysyncdb.sh
---
rm db.sqlite3
python manage.py sql yourappname
expect -c "
spawn python manage.py syncdb
expect Would; send \"yes\r\"
expect Username; send \"yourusername\r\"
expect Email; send \"\r\"
expect Password; send \"yourpassword\r\"
expect Password; send \"yourpassword\r\"
"
echo ""


---
実行結果、確認コマンド
---
$ mysyncdb.sh
...
$ # エラー無く完了する。
$ # けれども、DBを確認してみると ...
$ sqlite3 db.sqlite3
sqlite> select * from yourapp_user
sqlite> ; 何故か作成したはずの yourusername アカウントが存在しない。


どうぞ、よろしくお願いいたします。

●質問者: domodomodomo
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から

パスワードは手入力になりますが、いまいまはヒアドキュメントを使って逃げております。

rm db.sqlite3
python manage.py sql yourappname
python manage.py syncdb <<EOF
yes
yourusername

<<

1 ● snow0214
●200ポイント ベストアンサー

expectのスクリプトを下のようにしてみてください。

expect {
spawn python manage.py syncdb
expect \"Would\" {
 send \"yes\r\"
}
expect \"Username\"
 send \"yourusername\r\"
}
expect \"Email\"
 send \"\r\"
}
expect \"Password\" {
 send \"yourpassword\r\"
}
expect \"Password\" {
 send \"yourpassword\r\"
}

domodomodomoさんのコメント
ご教示いただいた内容でも、改善することができなかたのですが、 幸い、下記の通り、改善策が見つかりました。 貴重なお時間をいただき、誠にありがとうございました。

質問者から

答えは interact を追加し、標準入力に戻することでした。

原因は、上記のスクリプトでは yourpassword を2回打った段階で、
python manage.py syncdb コマンドが
エラーも出力せずに強制終了していたようでした。

正しいスクリプトは次のようになります。

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

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ