
と入力するのは面倒なmanage.py startserver 10.211.55.4:4000
ので、エイリアスを作成することにしました。唯一の問題は、ポートが変わることがあることです。そこで、bash プロファイルで次のようにしました。
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
しかし、それを呼び出すとrunserver 3000
、それは開始しますが、すぐに停止して次のように表示されます。
「エラー: その IP アドレスを割り当てることはできません」。ただし、同じ内容をコマンド ラインに直接入力すると、エラーは発生せず動作します。
答え1
元の試みに沿って、その関数を次のように調整できます。
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
そして次のように呼び出します:
PORT=3000 runserver
答え2
これは実際には、Python/Django にバインドできない IP アドレス (システムの一部ではない IP アドレス) を入力したときに返されるエラーです。以下に、実際に実行した例を示します。
$ python manage.py runserver 123.123.123.123:8000
Validating models...
0 errors found
June 03, 2014 - 22:36:58
Django version 1.5.7, using settings 'tv.settings'
Development server is running at http://123.123.123.123:8000/
Quit the server with CONTROL-C.
Error: That IP address can't be assigned-to.
したがって、IP アドレスを修正するか (使用可能なものを確認するには の出力を参照ifconfig --all
)、次のコマンドですべての IP アドレスにバインドする必要があります。
function runserver() {
python manage.py runserver 0:$1
}
bash 側は健全です。
答え3
君は正しいことをしているよ。
テスト中にネットワークの問題に遭遇したのではないかと思います。失敗したテストでこの関数が使用されていたのは偶然です。TCP接続を閉じると、まだ受信されていない保留中のパケットがある場合に備えて、ポートはしばらく(30秒)使用されたままになります(パケットが順番どおりに到着しないことがあります)。これがTIME_WAIT
州新しいサーバーをすぐに再起動できるようにするには、SO_REUSEADDR
旗を立てるsetsockopt
(Pythonに例がありますsocket
ドキュメンテーション)。
答え4
{ list; }
グループコマンドとhere-stringリダイレクトを使用してエイリアスを作成できます<<<
。主な目的はstdin
コマンドにリダイレクトすることです。以下にいくつかの方法を示します。
alias runserver='{ xargs -I % python manage.py runserver 10.211.55.4:%;} <<<'
alias runserver='{ IFS= read -r port; python manage.py runserver 10.211.55.4:"$port";} <<<'
alias runserver='{ port=$(line); echo python manage.py runserver 10.211.55.4:"$port";} <<<'
後ろにスペース{
、前にセミコロンが}
必要であることに注意してください。