Eu estou tentando configurar um servidor com python do terminal mac.
Navego para o local da pasta e uso:
python -m SimpleHTTPServer
Mas isso me dá erro:
socket.error: [Errno 48] Address already in use
Eu já havia aberto uma conexão usando o mesmo comando para um site diferente em um local diferente na minha máquina.
python
macos
simplehttpserver
irmãos
fonte
fonte
python -m SimpleHTTPServer 8081
Respostas:
Você já tem um processo vinculado à porta padrão (8000). Se você já executou o mesmo módulo antes, é mais provável que o processo ainda esteja vinculado à porta. Tente e localize o outro processo primeiro:
Os argumentos do comando estão incluídos, para que você possa identificar o que está sendo executado
SimpleHTTPServer
se mais de umpython
processo estiver ativo. Você pode querer testar sehttp://localhost:8000/
ainda mostra uma lista de diretórios para arquivos locais.O segundo número é o número do processo; pare o servidor enviando um sinal para ele:
Isso envia um
SIGTERM
sinal padrão ; se o processo não responder, talvez seja necessário recorrer a métodos mais difíceis, como enviar um sinalSIGKILL
(kill -s KILL <pid>
oukill -9 <pid>
). Veja a Wikipedia para mais detalhes .Como alternativa, execute o servidor em uma porta diferente , especificando a porta alternativa na linha de comandos:
depois acesse o servidor como
http://localhost:8910
; onde8910
pode haver qualquer número entre 1024 e superior, desde que a porta ainda não esteja ocupada.fonte
sudo kill -9 PID
kill
envia um sinal ao processo, com o qual ele pode decidir lidar (como desligar normalmente ou girar um arquivo de log). Esses sinais são números inteiros (cada um com um nome), o padrão sendo 15, significandoTERM
ou terminando . O uso de -9 envia o sinal 9,KILL
que um processo não pode capturar e ignorar, e o sistema operacional encerrará o processo se quiser ou não.Solução simples:
Encontre o processo usando a porta
8080
:sudo lsof -i:8080
Mate isso:
kill XXXX
fonte
lsof
saída pode ser e como encontrar o ID do processo (o "XXXX" que você lista) na saída. Para quem vê isso sem essas informações, é o segundo campo na saída, sob um rótulo de cabeçalho "PID".Usar
Isso fornecerá uma lista de processos usando a porta, se houver. Depois que a lista de processos for fornecida, use o ID na coluna PID para finalizar o processo.
fonte
A propósito, para impedir que isso aconteça, basta pressionar Ctrl+C no terminal enquanto o SimpleHTTPServer ainda está funcionando normalmente. Isso irá "corretamente" parar o servidor e liberar a porta para que você não precise encontrar e matar o processo novamente antes de reiniciar o servidor.
(Mods: Eu tentei colocar esse comentário na melhor resposta aonde ele pertence, mas não tenho reputação suficiente.)
fonte
Comando simples de uma linha para se livrar dele, digite o comando abaixo no terminal,
Isso listará todos os processos, check-out que está sendo usado pelo Python e digite o comando abaixo no terminal,
Por exemplo, kill -9 33178
fonte
Você também pode servir na próxima porta mais alta disponível, fazendo algo assim no Python:
Se você precisar fazer o mesmo com outros utilitários, pode ser mais conveniente como um script bash:
Configure isso como um executável com o nome
get-free-port
e você pode fazer algo assim:Isso não é tão confiável quanto a abordagem nativa do Python, porque o script bash não captura a porta - outro processo pode pegar a porta antes do seu processo (condição de corrida) - mas ainda pode ser útil o suficiente ao usar um utilitário que não ' Não tenha uma abordagem própria, tente novamente.
fonte
Eu sou novo no Python, mas após minha breve pesquisa, descobri que isso é típico de soquetes sendo vinculados. Acontece que o soquete ainda está sendo usado e você pode ter que esperar para usá-lo. Ou você pode simplesmente adicionar:
Isso deve disponibilizar a porta em menos tempo. No meu caso, disponibilizou a porta quase imediatamente.
fonte
Caso as soluções acima não funcionassem:
Obtenha a porta que seu processo está ouvindo:
$ ps ax | grep python
Mate o processo
$ kill PROCESS_NAME
fonte
Eu tenho um pi raspberry e estou usando um servidor web python (usando o Flask). Eu tentei de tudo acima, a única solução é fechar o terminal (shell) e abri-lo novamente. Ou reinicie o raspberry pi , porque nada impede o servidor da web ...
fonte
Você pode permitir que o servidor reutilize um endereço
allow_reuse_address
.fonte