web-dev-qa-db-ja.com

スクリプトの実行python --versionコマンドが出力を早すぎます

失敗したときに重要な環境変数を表示するエラーハンドラースクリプトがあります( Enter 読みやすくするためのエコー文字列では、質問の最後に完全な行が追加されます)

echo -e "--- failed at line $1 in function $2\nvirtual env = 
$(echo ${VIRTUAL_ENV})\ncurrent dir = ${PWD}\nbranch = $(git status | head
 -1)\ngit commit = $(git log -1 | tr '\n''\t')\npip version = $(pip -
V)\nPy version = $(python --version)\nhostname = $(logname)@$(hostname)\n"

python --versionの部分を除いて、良い結果が得られます:

Python 2.7.12  <--- why is this here?
--- failed at line 186 in function my_func
virtual env = 
current dir = /home/bla/blabla/foo
branch = On branch goo
git commit = commit ### Author: ... 
pip version = pip 18.1 from /usr/local/lib/python2.7/dist-packages/pip-18.1-py2.7.Egg/pip (python 2.7)
Py version =  <----- instead of here
hostname = X@Y

私の実際の機能はすぐにエコーを使用しません。また、tput setaf && tput sgr0を呼び出して色を変更します。 python行(1番目))は色付けされていませんが、他の行は...


"--- failed at line $1 in function $2\nvirtual env = $(echo ${VIRTUAL_ENV})\ncurrent dir = ${PWD}\nbranch = $(git status | head -1)\ngit commit = $(git log -1 | tr '\n''\t')\npip version = $(pip -V)\nPy version = $(python --version)\nhostname = $(logname)@$(hostname)\n"
2
CIsForCookies

コメントをありがとう@steeldriver(Nice band btw)実際にstderrに出力されていることを確認したら、修正は簡単でした。コマンドのstderrをstdoutにリダイレクトするだけです。つまり、Py version = $(python --version 2>&1)

また、このコメントに対する@pLumoのおかげで、このエラー(stdoutではなくstderrに出力)がpython 3.4以降で修正されました。

2
CIsForCookies