OSError: [errno 48] address already in use が出たときの対処法について記述していきます。
pythonでwebアプリ作成中に起こったことです。
※開発環境はmacOS、IDEはPyCharmです。
from bottle import run, route, template from datetime import datetime @route('/hello') # urlを指定する def hello(): gennzai = datetime.now() return template('Hello World! {{now}}', now=gennzai) run(host='localhost', port=8080, debug=True) # http://localhost:8080/hello で呼び出される
localhostは127.0.0.1でもOK。
これで実行すると、まず
Bottle v0.12.13 server starting up (using WSGIRefServer())... Listening on http://localhost:8080/ Hit Ctrl-C to quit.
と出力されます。でもPyCharmのデバッグエリアでCtrl+Cを押しても何も起こりません。
英語のキーボードとPyCharmとの相性が悪いとかなのでしょうか。
.pyの内容を少し書き換えてもう一度実行してみると、
OSError: [errno 48] address already in use
とデバッグエリアに表示されます。
調べてみると、前回実行したプロセスがまだ残っていることが問題のようです。
つまりサーバーを立てるのが二度目なので、エラーが発生しているということ。
そこでプロセスを消してみました。
プロセスの消し方について記述します。まずターミナルで
$ lsof -i :8080
とコマンドを入力してプロセス番号を調べます。
結果はこちら。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python3.6 14677 〜〜〜〜〜〜 4u IPv4 〜〜〜〜〜〜〜〜〜 0t0 TCP localhost:http-alt (LISTEN)
これにより、プロセスID(PID)は14677であるとわかります。
そして
$ kill 14677
とコマンドを入力して.pyを実行するとエラーは解消されていました。
Chromeで「http://localhost:8080/hello」で検索すると、
正常に実行されました。