Estoy tratando de configurar un servidor con Python desde la terminal de Mac.
Navego a la ubicación de carpeta y uso:
python -m SimpleHTTPServer
Pero esto me da un error:
socket.error: [Errno 48] Address already in use
Anteriormente había abierto una conexión usando el mismo comando para un sitio web diferente en una ubicación diferente en mi máquina.
python -m SimpleHTTPServer 8081
Respuestas:
Ya tiene un proceso vinculado al puerto predeterminado (8000). Si ya ejecutó el mismo módulo anteriormente, lo más probable es que el proceso aún esté vinculado al puerto. Intente localizar el otro proceso primero:
Se incluyen los argumentos del comando, por lo que puede detectar el que se está ejecutando
SimpleHTTPServer
si hay más de unpython
proceso activo. Es posible que desee probar sihttp://localhost:8000/
todavía muestra una lista de directorios para archivos locales.El segundo número es el número de proceso; Detenga el servidor enviándole una señal:
Esto envía una
SIGTERM
señal estándar ; Si el proceso no responde, puede que tenga que recurrir a métodos más duros como enviar una señalSIGKILL
(kill -s KILL <pid>
okill -9 <pid>
) en su lugar. Ver Wikipedia para más detalles .Alternativamente, ejecute el servidor en un puerto diferente , especificando el puerto alternativo en la línea de comando:
luego acceda al servidor como
http://localhost:8910
; donde8910
puede haber cualquier número desde 1024 en adelante, siempre que el puerto no esté tomado.fuente
sudo kill -9 PID
kill
envía una señal al proceso, que puede decidir manejar (como cerrar con gracia o rotar un archivo de registro). Estas señales son enteros (cada uno con un nombre), el valor predeterminado es 15, lo que significaTERM
o termina . El uso de -9 envía la señal 9,KILL
que un proceso no puede detectar e ignorar, y el sistema operativo finalizará el proceso si le gusta o no.Solución simple:
Encuentre el proceso usando el puerto
8080
:sudo lsof -i:8080
Mátalo:
kill XXXX
fuente
lsof
se vería el resultado y cómo encontrar el ID del proceso (el "XXXX" que usted enumera) dentro del resultado. Para cualquiera que vea esto sin esa información, es el segundo campo en la salida, bajo una etiqueta de encabezado de "PID".Utilizar
Esto le dará una lista de procesos que utilizan el puerto, si corresponde. Una vez que se proporciona la lista de procesos, use la identificación en la columna PID para terminar el uso del proceso.
fuente
Por cierto, para evitar que esto suceda en primer lugar, simplemente presione Ctrl+ Cen el terminal mientras SimpleHTTPServer todavía se está ejecutando normalmente. Esto "correctamente" detendrá el servidor y liberará el puerto para que no tenga que encontrar y eliminar el proceso nuevamente antes de reiniciar el servidor.
(Mods: intenté poner este comentario en la mejor respuesta a la que pertenece, pero no tengo suficiente reputación).
fuente
Comando simple de una línea para deshacerse de él, escriba el siguiente comando en la terminal,
Esto enumerará todo el proceso, la comprobación que está siendo utilizada por Python y el comando de tipo siguiente en la terminal,
Por ejemplo kill -9 33178
fuente
También puede servir en el siguiente puerto más alto disponible haciendo algo como esto en Python:
Si necesita hacer lo mismo para otras utilidades, puede ser más conveniente como un script bash:
Configure eso como un ejecutable con el nombre
get-free-port
y puede hacer algo como esto:Eso no es tan confiable como el enfoque nativo de Python porque el script bash no captura el puerto, otro proceso podría tomar el puerto antes de que lo haga su proceso (condición de carrera), pero aún puede ser lo suficientemente útil cuando se utiliza una utilidad que no No tiene un enfoque de prueba-prueba-otra vez.
fuente
Soy nuevo en Python, pero después de mi breve investigación descubrí que esto es típico de los zócalos conectados. Sucede que todavía se usa el zócalo y es posible que tenga que esperar para usarlo. O simplemente puede agregar:
Esto debería hacer que el puerto esté disponible en un tiempo más corto. En mi caso, hizo que el puerto estuviera disponible casi de inmediato.
fuente
Por si las soluciones anteriores no funcionaban:
Obtenga el puerto que su proceso está escuchando:
$ ps hacha | grep python
Mata el proceso
$ kill PROCESS_NAME
fuente
Tengo un raspberry pi y estoy usando el servidor web Python (usando Flask). He intentado todo lo anterior, la única solución es cerrar el terminal (shell) y abrirlo nuevamente. O reinicie la frambuesa pi , porque nada detiene ese servidor web ...
fuente
Puede permitir que el servidor reutilice una dirección con
allow_reuse_address
.fuente