OSError: [errno 48] address already in useが出たときの対処法

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」で検索すると、

正常に実行されました。

https://seiyamachi.com/symbolic-link/