Saya mencoba mengatur server dengan python dari terminal mac.
Saya menavigasi ke lokasi folder yang digunakan:
python -m SimpleHTTPServer
Tapi ini memberi saya kesalahan:
socket.error: [Errno 48] Address already in use
Saya sebelumnya telah membuka koneksi menggunakan perintah yang sama untuk situs web yang berbeda di lokasi yang berbeda di mesin saya.
python
macos
simplehttpserver
konfirmasi
sumber
sumber
python -m SimpleHTTPServer 8081
Jawaban:
Anda sudah memiliki proses yang terikat ke port default (8000). Jika Anda sudah menjalankan modul yang sama sebelumnya, kemungkinan besar proses itu masih terikat ke port. Coba dan cari proses lain terlebih dahulu:
Argumen perintah disertakan, sehingga Anda dapat melihat yang berjalan
SimpleHTTPServer
jika lebih dari satupython
proses aktif. Anda mungkin ingin menguji apakahhttp://localhost:8000/
masih menampilkan daftar direktori untuk file lokal.Angka kedua adalah nomor proses; hentikan server dengan mengirimkannya sinyal:
Ini mengirimkan
SIGTERM
sinyal standar ; jika prosesnya tidak responsif, Anda mungkin harus menggunakan metode yang lebih keras seperti mengirim sinyalSIGKILL
(kill -s KILL <pid>
ataukill -9 <pid>
). Lihat Wikipedia untuk lebih jelasnya .Atau, jalankan server pada port yang berbeda , dengan menentukan port alternatif pada baris perintah:
kemudian akses server sebagai
http://localhost:8910
; di mana8910
bisa nomor dari 1024 ke atas, asalkan port belum diambil.sumber
sudo kill -9 PID
kill
mengirimkan sinyal ke proses, yang dapat diputuskan untuk ditangani (seperti mematikan dengan anggun atau memutar file log). Sinyal-sinyal ini adalah bilangan bulat (masing-masing dengan nama), defaultnya adalah 15, artinyaTERM
atau berakhir . Menggunakan -9 mengirimkan sinyal 9,,KILL
yang prosesnya tidak dapat tangkap dan abaikan, dan OS akan mengakhiri proses apakah suka atau tidak.Solusi sederhana :
Temukan proses menggunakan port
8080
:sudo lsof -i:8080
Bunuh itu:
kill XXXX
sumber
lsof
output itu, dan bagaimana menemukan ID proses ("XXXX" daftar Anda) dalam output. Bagi siapa pun yang melihat ini tanpa informasi itu, itu adalah bidang kedua dalam output, di bawah label header "PID".Menggunakan
Ini akan memberi Anda daftar proses menggunakan port jika ada. Setelah daftar proses diberikan, gunakan id pada kolom PID untuk mengakhiri penggunaan proses
sumber
By the way, untuk mencegah hal ini terjadi di tempat pertama, cukup tekan Ctrl+ Cdi terminal saat SimpleHTTPServer masih berjalan normal. Ini akan "benar" menghentikan server dan melepaskan port sehingga Anda tidak perlu menemukan dan mematikan proses lagi sebelum me-restart server.
(Mods: Saya memang mencoba memberikan komentar ini pada jawaban terbaik di mana tempatnya, tetapi saya tidak memiliki reputasi yang cukup.)
sumber
Perintah sederhana satu baris untuk menghilangkannya, ketik perintah di bawah ini di terminal,
Ini akan mencantumkan semua proses, checkout yang sedang digunakan oleh Python dan ketik perintah di bawah di terminal,
Misalnya membunuh -9.317.18
sumber
Anda juga dapat melayani di port tertinggi berikutnya yang tersedia melakukan sesuatu seperti ini di Python:
Jika Anda perlu melakukan hal yang sama untuk utilitas lain, mungkin lebih nyaman sebagai skrip bash:
Tetapkan itu sebagai yang dapat dieksekusi dengan nama
get-free-port
dan Anda dapat melakukan sesuatu seperti ini:Itu tidak dapat diandalkan seperti pendekatan Python asli karena skrip bash tidak menangkap port - proses lain bisa mengambil port sebelum proses Anda lakukan (kondisi ras) - tetapi masih mungkin cukup berguna ketika menggunakan utilitas yang tidak Saya tidak memiliki pendekatan coba-coba sendiri.
sumber
Saya baru mengenal Python, tetapi setelah penelitian singkat saya menemukan bahwa ini adalah khas dari soket yang diikat. Kebetulan bahwa soket masih digunakan dan Anda mungkin harus menunggu untuk menggunakannya. Atau, Anda bisa menambahkan:
Ini harus membuat port tersedia dalam waktu yang lebih singkat. Dalam kasus saya, itu membuat port tersedia segera.
sumber
Untuk berjaga-jaga jika solusi di atas tidak berhasil:
Dapatkan port yang prosesnya Anda dengarkan:
$ ps kapak | grep python
Bunuh Prosesnya
$ kill PROCESS_NAME
sumber
Saya punya pi raspberry, dan saya menggunakan server web python (menggunakan Flask). Saya sudah mencoba semuanya di atas, satu-satunya solusi adalah dengan menutup terminal (shell) dan membukanya lagi. Atau mulai ulang pi raspberry , karena tidak ada yang menghentikan server web itu ...
sumber
Anda dapat mengizinkan server untuk menggunakan kembali suatu alamat
allow_reuse_address
.sumber