どーも!
たかぽんです!
今回は先程PythonのWebフレームワークであるFlaskでlocalにサーバーを立てようとしたんですが、うまくいかなかったので、それについて書いておこうと思います。
やりたかったこと
PythonのFlaskを使ってlocalにサーバーを立てようとしていたんですが、その際、ポート番号に5000番を指定するとうまく起動できないことがありました。
(base) taka@Taka BlockChain % python3 example.py -p 5000
OSError: [Errno 48] Address already in use
別にポート番号を5001等にしてしまえば問題ないんですが...
ただ、Flaskだと5000番が最初に通る道として示されていたので気になって調べてみました...!
解決策
まず占有しているpidを調べてみたところ、ControlCenterが何かしらをしているようでした。
(ControlCeまでしかでてないけど...w)
(base) taka@Taka BlockChain % sudo lsof -i:5000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ControlCe 622 taka 22u IPv4 0x47703b41f4073f99 0t0 TCP *:commplex-main (LISTEN)
ControlCe 622 taka 23u IPv6 0x47703b4b8c62fee9 0t0 TCP *:commplex-main (LISTEN)
そのため、それで少しWebを漁ってみたら...以下の記事を見つけました。
どうやら、AppleのAirPlayのRecieverで5000番ポートを占有しているようですね。
筆者は直近でAirPlayを使う予定はないので、止めて解決しました。
方法は簡単で、
システム環境設定 > 共有 > AirPlayレシーバーのチェックを外す
でOKです。
筆者は加えて、先程調べたpidのプロセスをkillしたんですが、レシーバーのチェックを外すのみでも大丈夫(別途下記の記事参照)なようなので、前述のチェックを外した時点で一度サーバーを再起動してみてください。
それでも無理だよ!って方は加えて以下で先ほどのプロセスを削除すると解決するかもです...!
killall -p 622
まとめ
port周りとかはいつまで経ってもよくわからん部分とかあるので、一生おつきあいしていくことになりそうだなぁ...と。
でもこういったことを調べていける力はしっかりと確保しておきたいところですね...!
是非困っている方がいらっしゃればご参考にしてみてください...!