alias / function com argumentos de linha de comando

1

Estou cansado de digitar manage.py startserver 10.211.55.4:4000 , então decidi criar um alias para isso. A única coisa é: a porta muda algumas vezes. Então eu fiz isso no perfil bash:

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

Mas quando eu o chamo: runserver 3000 , começa, mas imediatamente pára de dizer:

"Erro: Esse endereço IP não pode ser atribuído a". No entanto, se eu digitar a mesma coisa na linha de comando, ela funciona sem reclamações.

    
por iLemming 03.06.2014 / 21:58

4 respostas

3

Ao longo das linhas da sua tentativa original, você pode ajustar essa função para o seguinte:

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

e depois chama assim:

PORT=3000 runserver
    
por rocketman10404 03.06.2014 / 22:45
3

Este é, na verdade, um erro que você recebe do Python / Django quando você o alimenta com um endereço IP que não pode ser vinculado (um que não faz parte do sistema) como mostrado em um exemplo real, :

$ 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.

Então, você precisa corrigir seu endereço IP (veja a saída de ifconfig --all para ver o que está disponível) ou apenas ligar a todos eles com:

function runserver() {
    python manage.py runserver 0:
}

O lado negativo das coisas é bom.

    
por Oli 03.06.2014 / 23:40
0

Você está fazendo certo.

Suspeito que você esteja enfrentando um problema de rede em seu teste, e o fato de o teste com falha ter usado a função foi uma coincidência. Quando você fecha uma conexão TCP, a porta permanece em uso por um pequeno período de tempo (30s), caso haja pacotes pendentes que ainda não foram recebidos (os pacotes podem chegar fora de ordem). Este é o TIME_WAIT state . Para permitir que um novo servidor seja reiniciado imediatamente, definem o SO_REUSEADDR flag com setsockopt (há um exemplo no Python documentação socket ).

    
por Gilles 03.06.2014 / 23:01
0

Podemos criar o alias com o comando de grupo { list; } e o redirecionamento here-string <<< . O objetivo principal é redirecionar stdin para o comando. Há algumas maneiras apresentadas abaixo

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";} <<<'

Observe o espaço após { e ponto e vírgula antes de } serem necessários.

    
por Sergiy Kolodyazhnyy 23.06.2017 / 21:51