J'essaie de configurer un serveur avec python à partir du terminal mac.
Je navigue vers l'emplacement du dossier et j'utilise:
python -m SimpleHTTPServer
Mais cela me donne une erreur:
socket.error: [Errno 48] Address already in use
J'avais précédemment ouvert une connexion en utilisant la même commande pour un site Web différent dans un emplacement différent sur ma machine.
python -m SimpleHTTPServer 8081
Réponses:
Vous avez déjà un processus lié au port par défaut (8000). Si vous avez déjà exécuté le même module auparavant, il est très probable que le processus soit toujours lié au port. Essayez d'abord de localiser l'autre processus:
Les arguments de commande sont inclus, vous pouvez donc repérer celui en cours d'exécution
SimpleHTTPServer
si plusieurspython
processus sont actifs. Vous voudrez peut-être tester sihttp://localhost:8000/
affiche toujours une liste de répertoires pour les fichiers locaux.Le deuxième nombre est le numéro de processus; arrêtez le serveur en lui envoyant un signal:
Cela envoie un
SIGTERM
signal standard ; si le processus ne répond pas, vous devrez peut-être recourir à des méthodes plus sévères comme l'envoi d'un signalSIGKILL
(kill -s KILL <pid>
oukill -9 <pid>
) à la place. Voir Wikipedia pour plus de détails .Vous pouvez également exécuter le serveur sur un port différent , en spécifiant le port alternatif sur la ligne de commande:
puis accédez au serveur en tant que
http://localhost:8910
; où8910
peut être n'importe quel nombre de 1024 et plus, à condition que le port ne soit pas déjà pris.la source
sudo kill -9 PID
kill
envoie un signal au processus, qu'il peut décider de gérer (comme arrêter gracieusement ou faire pivoter un fichier journal). Ces signaux sont des entiers (chacun avec un nom), la valeur par défaut étant 15, signifiantTERM
ou se terminant . L'utilisation de -9 envoie le signal 9,KILL
qu'un processus ne peut pas attraper et ignorer, et le système d'exploitation mettra fin au processus qu'il le veuille ou non.Solution simple:
Trouvez le processus en utilisant le port
8080
:sudo lsof -i:8080
Tue le:
kill XXXX
la source
lsof
pourrait ressembler la sortie et comment trouver l'ID de processus (le "XXXX" que vous listez) dans la sortie. Pour tous ceux qui voient cela sans cette information, c'est le deuxième champ dans la sortie, sous une étiquette d'en-tête "PID".Utilisation
Cela vous donnera une liste des processus utilisant le port, le cas échéant. Une fois la liste des processus fournie, utilisez l'identifiant dans la colonne PID pour terminer l'utilisation du processus
la source
Soit dit en passant, pour éviter que cela ne se produise en premier lieu, appuyez simplement sur Ctrl+C dans le terminal pendant que SimpleHTTPServer fonctionne toujours normalement. Cela arrêtera "correctement" le serveur et libérera le port afin que vous n'ayez pas à rechercher et à tuer le processus à nouveau avant de redémarrer le serveur.
(Mods: j'ai essayé de mettre ce commentaire sur la meilleure réponse où il appartient, mais je n'ai pas assez de réputation.)
la source
Commande simple sur une ligne pour s'en débarrasser, tapez la commande ci-dessous dans le terminal,
Cela répertoriera tous les processus, la vérification qui sont utilisés par Python et tapez la commande ci-dessous dans le terminal,
Par exemple, tuer -9 33178
la source
Vous pouvez également servir sur le port disponible le plus élevé suivant en faisant quelque chose comme ceci en Python:
Si vous devez faire la même chose pour d'autres utilitaires, cela peut être plus pratique comme script bash:
Configurez cela comme un exécutable avec le nom
get-free-port
et vous pouvez faire quelque chose comme ceci:Ce n'est pas aussi fiable que l'approche native de Python car le script bash ne capture pas le port - un autre processus pourrait saisir le port avant votre processus (condition de concurrence critique) - mais peut quand même être assez utile lorsque vous utilisez un utilitaire qui ne fonctionne pas. t avoir une approche propre à essayer.
la source
Je suis nouveau sur Python, mais après mes brèves recherches, j'ai découvert que cela est typique des sockets liés. Il se trouve que le socket est toujours utilisé et que vous devrez peut-être attendre pour l'utiliser. Ou, vous pouvez simplement ajouter:
Cela devrait rendre le port disponible dans un délai plus court. Dans mon cas, il a rendu le port disponible presque immédiatement.
la source
Juste au cas où les solutions ci-dessus ne fonctionneraient pas:
Obtenez le port que votre processus écoute:
$ ps ax | grep python
Tuez le processus
$ kill PROCESS_NAME
la source
J'ai un Raspberry Pi et j'utilise un serveur Web Python (en utilisant Flask). J'ai tout essayé ci-dessus, la seule solution est de fermer le terminal (shell) et de l'ouvrir à nouveau. Ou redémarrez le raspberry pi , car rien n'arrête ce serveur web ...
la source
Vous pouvez autoriser le serveur à réutiliser une adresse avec
allow_reuse_address
.la source