alias / function с аргументами командной строки

Я устал печатать manage.py startserver 10.211.55.4:4000, поэтому решил сделать псевдоним для этого. Единственное: порт когда-то меняется. Поэтому я сделал это в bash-профиле:

function runserver() {
   python manage.py runserver 10.211.55.4:$1
}

Но тогда, когда я его назову: runserver 3000, он запускает его, но сразу же перестает говорить:

«Ошибка: этот IP-адрес адрес не может быть назначен - ". Однако, если я нахожу то же самое прямо в командной строке, он работает без жалоб.

1
задан 4 June 2014 в 02:40

3 ответа

На самом деле это ошибка, которую вы возвращаете из Python / Django, когда вы подаете ей 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, чтобы узнать, что доступно), либо просто привязаны ко всем из них:

Бах-сторона вещей звучит.

3
ответ дан 24 May 2018 в 07:01

Вы делаете это правильно.

Я подозреваю, что вы столкнулись с сетевой проблемой в своем тестировании, и тот факт, что неудачный тест использовал эту функцию, был совпадением. Когда вы закрываете TCP-соединение, порт остается в использовании в течение небольшого промежутка времени (30 секунд), если ожидающие пакеты еще не получены (пакеты могут выйти из строя). Это состояние TIME_WAIT. Чтобы перезапустить новый сервер, установите флаг SO_REUSEADDR с помощью setsockopt (в документации Python socket есть пример).

0
ответ дан 24 May 2018 в 07:01
  • 1
    но почему это работает, когда я набираю то же самое прямо на консоль? – Agzam 4 June 2014 в 02:27

Мы можем сделать псевдоним с перенаправлением группы { list; } и здесь-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";} <<<'

Обратите внимание на пробел после { и точку с запятой до }.

0
ответ дан 24 May 2018 в 07:01

Другие вопросы по тегам:

Похожие вопросы: