
Ich bin es leid, zu tippen manage.py startserver 10.211.55.4:4000
, also habe ich beschlossen, einen Alias dafür zu erstellen. Das einzige Problem ist: Der Port ändert sich manchmal. Also habe ich Folgendes im Bash-Profil gemacht:
function runserver() {
python manage.py runserver 10.211.55.4:$1
}
Aber wenn ich es dann aufrufe: runserver 3000
, wird es gestartet, hört aber sofort auf und sagt:
„Fehler: Diese IP-Adresse kann nicht zugewiesen werden.“ Wenn ich jedoch dasselbe direkt in die Befehlszeile eingebe, funktioniert es ohne Probleme.
Antwort1
In Anlehnung an Ihren ursprünglichen Versuch könnten Sie diese Funktion wie folgt anpassen:
function runserver() {
python manage.py runserver 10.211.55.4:$PORT
}
und rufen Sie es dann so auf:
PORT=3000 runserver
Antwort2
Dabei handelt es sich eigentlich um einen Fehler, den Sie von Python/Django zurückbekommen, wenn Sie ihm eine IP-Adresse zuführen, mit der es keine Verbindung herstellen kann (eine, die nicht Teil des Systems ist), wie in einem echten, gerade ausgeführten Beispiel unten gezeigt:
$ 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.
Sie müssen also entweder Ihre IP-Adresse korrigieren (sehen Sie sich die Ausgabe an, ifconfig --all
um zu sehen, was verfügbar ist) oder Sie binden sie einfach mit Folgendem an alle:
function runserver() {
python manage.py runserver 0:$1
}
Die Bash-Seite der Dinge ist der Ton.
Antwort3
Du machst es richtig.
Ich vermute, dass Sie bei Ihren Tests auf ein Netzwerkproblem stoßen und dass die Tatsache, dass der fehlgeschlagene Test die Funktion verwendet hat, ein Zufall war. Wenn Sie eine TCP-Verbindung schließen, bleibt der Port für eine kurze Zeit (30 Sekunden) in Gebrauch, falls noch Pakete ausstehen, die noch nicht empfangen wurden (Pakete können in der falschen Reihenfolge eintreffen). Dies ist dieTIME_WAIT
Zustand. Um einen sofortigen Neustart eines neuen Servers zu ermöglichen,setze die SO_REUSEADDR
Flaggemit setsockopt
(es gibt ein Beispiel im Pythonsocket
Dokumentation).
Antwort4
Wir können Aliasnamen mit Gruppenbefehlen { list; }
und Here-String- <<<
Umleitungen erstellen. Das Hauptziel ist stdin
die Umleitung zum Befehl. Im Folgenden werden einige Möglichkeiten vorgestellt.
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";} <<<'
Beachten Sie, dass das Leerzeichen danach {
und das Semikolon davor }
erforderlich sind.