скрипт, выполняющий команду 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:

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 & amp; tput sgr0 изменить цвета. Строка питона (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
задан 1 August 2019 в 17:08

1 ответ

Спасибо @steeldriver (хорошая полоса btw) для его комментария. Фиксация была легче, после того как я проверил, что она действительно печатала к stderr - просто перенаправляют stderr к stdout для команды. т.е. Py version = $(python --version 2>&1)

Также благодаря @pLumo для этого комментария, что эта ошибка (печатающий к stderr вместо этого stdout) была зафиксирована в python 3.4 и более новая

2
ответ дан 2 December 2019 в 03:27

Другие вопросы по тегам:

Похожие вопросы: