Сценарий оболочки не может сохранить вывод из командной строки в переменную

Я пытаюсь выполнить команду оболочки, а затем сохранить вывод в переменную с помощью сценария оболочки. Поэтому я использую обратные кавычки следующим образом:

out=`ls -l`
print $out

этот код работает нормально, и я могу использовать его для любой другой команды оболочки, но когда я пытаюсь выполнить «python --version», чтобы проверить версию Python. у меня странная проблема. Обратная галочка не работает для команды «python --version», в то время как она отлично работает с любыми другими командами, она выводит вывод на экран и ничего не сохраняет в переменной $out. поэтому, если я сделаю:

out =`python --version`
print "my python version is "$out

результат:

Python 2.6.1
my python version is 

также я пытался использовать $() для замены обратной кавычки, но безуспешно. Любая идея ?


person andio    schedule 07.05.2012    source источник
comment
Bactics - старый способ сделать это. Использование $() намного читабельнее.   -  person OlivierLi    schedule 07.05.2012


Ответы (1)


У вас есть пробел перед знаком равенства:

out =`python --version`

Должно быть:

out=`python --version`

Обновить

Также python выводит строку версии в stderr, поэтому вам нужно перенаправить ее на stdout:

out=`python --version 2>&1`
person Paul    schedule 07.05.2012
comment
perfecto, Большое спасибо. теперь он работает нормально. Как вы сказали, проблема в том, что python выводит его в stderr. out=`python --version 2›&1` работает! Спасибо. - person andio; 08.05.2012
comment
Я работал над написанием хука перед фиксацией и также не мог понять, почему вывод не сохраняется. Ваш трюк 2›&1 сработал отлично! Спасибо! - person NateW; 11.12.2015