Я пытаюсь настроить сервер с python из терминала Mac.
Я перехожу к папке с использованием:
python -m SimpleHTTPServer
Но это дает мне ошибку:
socket.error: [Errno 48] Address already in use
Ранее я открывал соединение с помощью той же команды для другого веб-сайта в другом месте на моем компьютере.
python -m SimpleHTTPServer 8081
Ответы:
У вас уже есть процесс, связанный с портом по умолчанию (8000). Если вы уже запускали тот же модуль ранее, скорее всего, этот процесс все еще привязан к порту. Попробуйте сначала найти другой процесс:
Аргументы команды включены, поэтому вы можете определить, какой из них запущен,
SimpleHTTPServer
еслиpython
активен более одного процесса. Вы можете проверить, еслиhttp://localhost:8000/
все еще показывает список каталогов для локальных файлов.Второе число - это номер процесса; остановить сервер, отправив ему сигнал:
Это посылает стандартный
SIGTERM
сигнал; если процесс не отвечает, вам, возможно, придется прибегнуть к более жестким методам, таким как отправкаSIGKILL
(kill -s KILL <pid>
илиkill -9 <pid>
) сигнала. Смотрите Википедию для более подробной информации .Либо запустите сервер на другом порту, указав альтернативный порт в командной строке:
затем получить доступ к серверу как
http://localhost:8910
; где8910
может быть любое число от 1024 и выше, если порт еще не занят.источник
sudo kill -9 PID
kill
отправляет сигнал процессу, который он может решить обработать (например, корректно завершить работу или повернуть файл журнала). Эти сигналы являются целыми числами (каждое с именем), значение по умолчанию 15, означающееTERM
или завершающее . Использование -9 отправляет сигнал 9,KILL
который процесс не может перехватить и проигнорировать, и ОС завершит процесс, нравится ему это или нет.Простое решение :
Найдите процесс, используя порт
8080
:sudo lsof -i:8080
Убей это:
kill XXXX
источник
lsof
может выглядеть вывод, и как найти идентификатор процесса (список «XXXX») в выводе. Для тех, кто видит это без этой информации, это второе поле в выводе под меткой заголовка «PID».использование
Это даст вам список процессов, использующих порт, если таковые имеются. Как только список процессов задан, используйте идентификатор в столбце PID, чтобы прекратить использование процесса
источник
Кстати, чтобы этого не происходило, просто нажмите Ctrl+ Cв терминале, пока SimpleHTTPServer по-прежнему работает нормально. Это «правильно» остановит сервер и освободит порт, поэтому вам не придется снова находить и завершать процесс перед перезапуском сервера.
(Моды: я пытался поставить этот комментарий на лучший ответ, где он принадлежит, но мне не хватает репутации.)
источник
Простая однострочная команда, чтобы избавиться от нее, введите команду ниже в терминале,
Это перечислит весь процесс, извлечение которого используется Python, и введите команду bellow в терминале,
Например убить -9 33178
источник
Вы также можете обслуживать следующий по величине доступный порт, выполняя что-то вроде этого в Python:
Если вам нужно сделать то же самое для других утилит, это может быть удобнее, чем скрипт bash:
Установите это как исполняемый файл с именем,
get-free-port
и вы можете сделать что-то вроде этого:Это не так надежно, как родной подход Python, потому что bash-скрипт не захватывает порт - другой процесс может захватить порт раньше, чем ваш процесс (условие гонки) - но все же может быть достаточно полезен при использовании утилиты, которая не ' у меня нет собственного подхода.
источник
Я новичок в Python, но после краткого исследования я обнаружил, что это типично для связывания сокетов. Просто так получилось, что сокет все еще используется, и вам, возможно, придется подождать, чтобы его использовать. Или вы можете просто добавить:
Это должно сделать порт доступным в более короткие сроки. В моем случае это сделало порт доступным почти сразу.
источник
На всякий случай вышеприведенные решения не сработали:
Получите порт, который слушает ваш процесс:
$ ps ax | grep python
Убить процесс
$ kill PROCESS_NAME
источник
У меня есть Raspberry Pi, и я использую веб-сервер Python (используя Flask). Я попробовал все выше, единственное решение - закрыть терминал (оболочку) и открыть его снова. Или перезапустите Raspberry Pi , потому что ничто не останавливает этот веб-сервер ...
источник
Вы можете разрешить серверу повторно использовать адрес с помощью
allow_reuse_address
.источник