Обнаружить версию python в сценарии оболочки

Я бы хотел определить, установлен ли python в системе Linux, и если это так, какая версия python установлена.

Как мне это сделать? Есть ли что-то более грациозное, чем синтаксический анализ вывода "python --version" ?

  • Как я могу взять квадратный корень из -1 с помощью python?
  • Как обрабатывается __eq__ в Python и в каком порядке?
  • формат номера телефона в csv с использованием панд
  • Как определить, какой из атрибутов атрибута объекта терпит неудачу?
  • Групповые этикетки в barplart matplotlib с использованием Pandas MultiIndex
  • Используя Flask-WTForms, как мне создать раздел формы в html?
  • Как аккуратно держать под шириной 80 символов с длинными строками?
  • Это плохая форма, чтобы поднять ArgumentError вручную?
  • 9 Solutions collect form web for “Обнаружить версию python в сценарии оболочки”

    Вы можете использовать что-то в следующих строках:

     $ python -c 'import sys; print(sys.version_info[:])' (2, 6, 5, 'final', 0) 

    Кортеж зарегистрирован здесь . Вы можете развернуть код Python выше, чтобы отформатировать номер версии таким образом, который соответствовал бы вашим требованиям, или действительно выполнить проверки на нем.

    Вам нужно будет проверить $? в вашем скрипте, чтобы обрабатывать случай, когда python не найден.

    PS Я использую слегка нечетный синтаксис для обеспечения совместимости с Python 2.x и 3.x.

     python -c 'import sys; print sys.version_info' 

    или, с точки зрения человека:

     python -c 'import sys; print(".".join(map(str, sys.version_info[:3])))' 

    Вы также можете использовать это:

     pyv="$(python -V 2>&1)" echo "$pyv" 

    Вы можете использовать эту команду в bash:

     PYV=`python -c "import sys;t='{v[0]}.{v[1]}'.format(v=list(sys.version_info[:2]));sys.stdout.write(t)";` echo $PYV 

    использование sys.hexversion может быть полезно, если вы хотите сравнить версию в сценарии оболочки

     ret=`python -c 'import sys; print("%i" % (sys.hexversion<0x03000000))'` if [ $ret -eq 0 ]; then echo "we require python version <3" else echo "python version is <3" fi 

    Я использовал ответ Джахида вместе с номером версии Extract из строки, чтобы сделать что-то написанное исключительно в оболочке. Он также возвращает только номер версии, а не слово «Python». Если строка пуста, Python не установлен.

     version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)') if [[ -z "$version" ]] then echo "No Python!" fi 

    Предположим, вы хотите сравнить номер версии, чтобы узнать, используете ли вы последнюю версию Python, для удаления периодов в номере версии используйте следующее. Затем вы можете сравнивать версии с использованием целочисленных операторов типа «Я хочу, чтобы версия Python была больше 2.7.0 и меньше 3.0.0». Ссылка: $ {var // Образец / Замена} в http://tldp.org/LDP/abs/html/parameter-substitution.html

     parsedVersion=$(echo "${version//./}") if [[ "$parsedVersion" -lt "300" && "$parsedVersion" -gt "270" ]] then echo "Valid version" else echo "Invalid version" fi 

    Вы можете использовать модуль платформы, который является частью стандартной библиотеки Python:

     $ python -c 'import platform; print(platform.python_version())' 2.6.9 

    Этот модуль позволяет печатать только часть строки версии:

     $ python -c 'import platform; major, minor, patch = platform.python_version_tuple(); print(major); print(minor); print(patch)' 2 6 9 

    Чтобы проверить, установлен ли какой-либо Python (учитывая, что он находится на PATH), он прост как:

     if which python > /dev/null 2>&1; then #Python is installed else #Python is not installed fi 

    Часть > /dev/null 2>&1 предназначена только для подавления вывода.

    Чтобы получить номера версий, также:

     if which python > /dev/null 2>&1; then #Python is installed python_version=`python --version 2>&1 | awk '{print $2}'` echo "Python version $python_version is installed." else #Python is not installed echo "No Python executable is found." fi 

    Пример вывода с установленным Python 3.5: «Установлена ​​версия Python 3.5.0».

    Примечание 1. Часть awk '{print $2}' будет работать некорректно, если Python не установлен, поэтому либо используйте внутри проверки, как в примере выше, либо используйте grep как было предложено Sohrab T. Хотя grep -P использует синтаксис regexp Perl и может иметь некоторые проблемы с переносимостью.

    Примечание 2: python --version или python -V могут не работать с версиями Python до 2.5. В этом случае используйте python -c ... как предложено в других ответах.

    Вот еще одно решение, использующее хеш, чтобы проверить, установлен ли python и sed, чтобы извлечь первые два основных номера версии и сравнить, если установлена ​​минимальная версия

     if ! hash python; then echo "python is not installed" exit 1 fi ver=$(python --version 2>&1 | sed 's/.* \([0-9]\).\([0-9]\).*/\1\2/') if [ "$ver" -lt "27" ]; then echo "This script requires python 2.7 or greater" exit 1 fi 
    Python - лучший язык программирования в мире.