くろみーの日報テンプレ

日常のほのぼのした記録

Python でバージョンを確認したいときは `-v` ではなく `-V` を使う

python でバージョンを確認したいときは -v ではなく -V を使おう

今朝、python のバージョンを確認したいだけなのに大量に謎のログが出力されてしまう問題で悩んでいた

例えばこんな感じ

% python -v
import _frozen_importlib # frozen
import _imp # builtin
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import '_warnings' # <class '_frozen_importlib.BuiltinImporter'>
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
import '_io' # <class '_frozen_importlib.BuiltinImporter'>
import 'marshal' # <class '_frozen_importlib.BuiltinImporter'>
import 'posix' # <class '_frozen_importlib.BuiltinImporter'>
import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'>
# installing zipimport hook
...

みた感じ別にエラーになっているわけではなさそうだったが、例えば以下のようなシェルスクリプトを書いていると、この部分で Python のプロンプトが開かれてしまうため処理が途中で止まってしまう

python -v | grep ${PYTHON_VERSION} > /dev/null || pyenv install ${PYTHON_VERSION} && pyenv global ${PYTHON_VERSION}

なんでだろうと困っていたら、ひょっとしたらこれは verbose の v なのではないかということに思い当たった

念の為ヘルプを確認してみたところあたり

%python --help
...
-v     : verbose (trace import statements); also PYTHONVERBOSE=x
         can be supplied multiple times to increase verbosity
-V     : print the Python version number and exit (also --version)
         when given twice, print more information about the build
...

python -v の代わりに python -V を使ってあげたら解決

ちなみに ruby だと -V オプションはなくて -v オプションでバージョンを見る仕様なのでややこしい

ケースバイケースということか