私は、mac端末からpythonでサーバを設定しようとしています。socket.error:[Errno 48]アドレスは既に使用中です
私は、使用場所をフォルダに移動:
python -m SimpleHTTPServer
しかし、これは私にエラーを与える:
socket.error: [Errno 48] Address already in use
私は以前に別の異なるウェブサイトのために同じコマンド を使用して接続をオープンしました私のマシンの場所。
私は、mac端末からpythonでサーバを設定しようとしています。socket.error:[Errno 48]アドレスは既に使用中です
私は、使用場所をフォルダに移動:
python -m SimpleHTTPServer
しかし、これは私にエラーを与える:
socket.error: [Errno 48] Address already in use
私は以前に別の異なるウェブサイトのために同じコマンド を使用して接続をオープンしました私のマシンの場所。
すでにプロセスがデフォルトのポート(8000)にバインドされています。以前に同じモジュールを実行していた場合、プロセスはまだポートにバインドされている可能性があります。最初に他のプロセスを試してみて、見つける:複数のpython
プロセスがアクティブである場合は、SimpleHTTPServer
を実行しているものを見つけることができるように
$ ps -fA | grep python
501 81651 12648 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
コマンドの引数は、含まれています。 http://localhost:8000/
にローカルファイルのディレクトリ一覧がまだ表示されているかどうかをテストしたい場合があります。
2番目の番号はプロセス番号です。それに信号を送信することで、サーバを停止します。
kill 81651
これは標準SIGTERM
信号を送信します。プロセスが応答しない場合は、代わりにSIGKILL
(kill -s KILL <pid>
またはkill -9 <pid>
)シグナルを送信するなど、より厳しい方法に頼らざるを得ない可能性があります。 Wikipedia for more detailsを参照してください。あるいは
、コマンドライン上の別のポートを指定することによって、異なるポート上のサーバーを実行します
$ python -m SimpleHTTPServer 8910
Serving HTTP on 0.0.0.0 port 8910 ...
は次にhttp://localhost:8910
としてサーバにアクセスします。 8910
は1024以上の任意の番号で指定できますが、ポートがまだ使用されていない場合に限ります。
また、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)
これは、bashスクリプトがポートを取得しないため、ネイティブのPythonの手法ほど信頼性がありません。プロセスが競合する前に別のプロセスがポートを取得する可能性がありますが、それはそれ自身のtry-try-againアプローチを持っていません。
シンプルなソリューション:
ポート8080
を使用してプロセスを探す:
sudo lsof -i:8080
それを殺す:
kill XXXX
この答えは 'lsof'出力の例と、出力内のプロセスID(あなたがリストした" XXXX ")を見つける方法の恩恵を受けるでしょう。その情報なしでこれを見る人にとって、それは "PID"のヘッダーラベルの下に出力の2番目のフィールドです。 – lindes
ところで、これが最初に起きないようにするには、SimpleHTTPServerがまだ正常に動作している間に、Ctrl + Cを端末に入力するだけです。これにより、サーバーを「正常に」停止してポートを解放するため、サーバーを再起動する前にプロセスを再度検出して終了する必要はありません。
(改造:。私はそれが属する最良の答えにこのコメントを入れてみてくださいでしたが、私は十分な評判を持っていない)
利用-iのlsof:5000 これは、あなたのリストが表示されますポートを使用している場合は処理します。 プロセスのリストが与えられたら、PIDカラムのidを使ってプロセスを終了します:kill 379
他のプロセスをkillするか、別のポートで実行します: 'python -m SimpleHTTPServer 8081' – Blender