Help us understand the problem. What is going on with this article?

開発用ローカルサーバのPythonコマンドを統一するスクリプトの書き方

Macのローカルで簡易にWebサーバを建てたい時は、
Pythonのワンライナーでサクッと建てられるので便利です。
でも、バージョンが2系と3系ではコマンドが微妙に違うので使い分ける必要があり、
pyenv等を使用してローカルのバージョンを切り替えて使っている場合などではちょっとだけ不便でした。

Python 2系のコマンド

ポート8000番で建てたい場合

$ python -m SimpleHTTPServer 8000

Python 3系のコマンド

ポート8000番で建てたい場合

$ python -m http.server 8000

そこで、バージョンに関わらず実行できるスクリプトを作り、それにエイリアスを貼ることで同一コマンドで実行できるようにします。

Pythonバージョンに関わらず実行できる簡易サーバースクリプト

以下のようなスクリプトを ~/.bash_profile に追記すると、バージョンに関わらず py-server コマンドで実行できるようになります。
なお、実行時のデフォルトポート番号は8000にしています。

~/.bash_profile
# pythonのバージョンに関わらず簡易サーバーを建てるコマンド
python-local-server() {
  local PORT=8000
  if [ $# -gt 0 ] ; then
    PORT="$@"
  fi
  local PV=$(python -V 2>&1 | cut -d ' ' -f 2 | cut -c 1)
  if [ $PV -eq "3" ] ; then
    python -m http.server ${PORT}
  else
    python -m SimpleHTTPServer ${PORT}
  fi
}
alias py-server=python-local-server

追記したあとは ~/.bash_profile を読み込み直します。

$ source ~/.bash_profile

実行時、以下のようにコマンド入力すれば、任意のポート番号でも実行できるようにしています。

$ py-server 3333
Serving HTTP on 0.0.0.0 port 3333 (http://0.0.0.0:3333/) ...

参考記事

Python2系のバージョン抽出が素直には動かず苦労したため、以下の記事に助けられました。
CentOS7のシェル上でPythonのバージョン(2.7.5など)だけを取得する - Qiita

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away