Я'пытаюсь настроить сервер с помощью python из терминала mac.
Я перехожу к расположению папки и использую:
python -m SimpleHTTPServer
Но это дает мне ошибку:
socket.error: [Errno 48] Address already in use
Ранее я уже открывал соединение с помощью той же команды для другого веб-сайта в другом месте на моей машине.
У вас уже есть процесс, привязанный к порту по умолчанию (8000). Если вы уже запускали этот модуль ранее, то, скорее всего, этот процесс все еще привязан к порту. Попробуйте сначала найти другой процесс:
$ ps -fA | grep python
501 81651 12648 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
Аргументы команды включены, так что вы можете определить тот, который запускает SimpleHTTPServer
, если активно более одного процесса python
. Вы можете проверить, показывает ли http://localhost:8000/
по-прежнему список каталогов для локальных файлов.
Второе число - это номер процесса; остановите сервер, послав ему сигнал:
kill 81651
Это посылает стандартный сигнал SIGTERM
; если процесс не реагирует, возможно, вам придется прибегнуть к более жестким методам, например, послать сигнал SIGKILL
(kill -s KILL <pid>
или kill -9 <pid>
). См. Википедия для более подробной информации.
В качестве альтернативы, запустите сервер на другом порту, указав альтернативный порт в командной строке:
$ python -m SimpleHTTPServer 8910
Serving HTTP on 0.0.0.0 port 8910 ...
тогда доступ к серверу будет осуществляться как http://localhost:8910
; где 8910
может быть любым числом от 1024 и выше, если порт еще не занят.
Простое решение:
8080
:`sudo lsof -i:8080`.
`kill XXXX`.
Использовать
sudo lsof -i:5000
Это даст вам список процессов, использующих порт, если таковые имеются. Как только в списке процессов дается, используйте идентификатор на колонке ПИД прекратить использовать процесс
kill 379 #use the provided PID
Кстати, чтобы этого не произошло, в первую очередь, просто нажмите <и>сочетание клавиш Ctrl</роз>+<и>в</КБД> В терминале А SimpleHTTPServer по-прежнему работает нормально. Это как "правильно" и остановки сервера и освободить порт, так что вы Дон'т иметь, чтобы найти и снова убить процесс до перезагрузки сервера.
(Модов: я пытался поставить этот комментарий на лучший ответ, где это принадлежит, но я не'т иметь достаточно высокую репутацию.)
Вы также можете обслуживать следующий по старшинству доступный порт, выполнив в Python примерно следующее:
import SimpleHTTPServer
import SocketServer
Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
port = 8000
while True:
try:
httpd = SocketServer.TCPServer(('', port), Handler)
print 'Serving on port', port
httpd.serve_forever()
except SocketServer.socket.error as exc:
if exc.args[0] != 48:
raise
print 'Port', port, 'already in use'
port += 1
else:
break
Если вам нужно сделать то же самое для других утилит, это может быть более удобно в виде сценария на bash:
#!/usr/bin/env bash
MIN_PORT=${1:-1025}
MAX_PORT=${2:-65535}
(netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$'; seq "$MIN_PORT" "$MAX_PORT") | sort -R | head -n 1
Установите его как исполняемый файл с именем get-free-port
и вы сможете сделать что-то вроде этого:
someprogram --port=$(get-free-port)
Это не так надежно, как родной подход Python, поскольку сценарий bash не перехватывает порт - другой процесс может захватить порт раньше вашего процесса (состояние гонки) - но все же может быть достаточно полезным при использовании утилиты, которая не имеет собственного подхода try-try-again.
Я новичок в Python, но после моего краткого исследования я выяснил, что это типичный розеток будет назначен. Просто так получилось, что гнездо по-прежнему используется, и вы, возможно, придется ждать, чтобы использовать его. Или, вы можете просто добавить:
tcpSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
Это должно сделать порт доступен в более короткие сроки. В моем случае, это сделал порт доступен практически сразу.
Простой командной строки, чтобы избавиться от него, введите ниже команду в терминале,
ps -a
Это список всех процессов, проверка которых используется Python и команды ниже введите в терминал
kill -9 (processID)
Например убить -9 33178
Только в случае, если вышеперечисленные решения не't работа:
$ зы топор | грэп питона
$ убить ИМЯ_ПРОЦЕССА
У меня есть Raspberry Pi, и я использую питон веб-сервер (через колбу). Я пробовал все выше, единственным решением является закрыть терминал(корпус) и снова открыть его. Или перезагрузите Raspberry Пи, потому что ничего не останавливает, что веб-сервер...
в
Вы можете разрешить серверу повторно использовать адрес allow_reuse_address
.
будет ли сервер позволит повторно использовать адрес. По умолчанию это значение
false
, и может быть установлен в подклассах, чтобы изменить политику.
import SimpleHTTPServer, SocketServer
PORT = 8000
httpd = SocketServer.TCPServer(("", PORT), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.allow_reuse_address = True
print "Serving at port", PORT
httpd.serve_forever()