Найти версию Python в сценарии Tcl - PullRequest
0 голосов
/ 18 апреля 2019

Можно ли узнать в .tcl-скрипте, какая версия Python установлена?Другими словами, как я могу узнать, какая версия Python находится в пути по умолчанию из сценария .tcl?

Tcl Wiki не содержит полезной информации об этом

в настоящее времяЯ вызываю скрипт Python, который печатает sys.version и анализирует его вывод.

.py

import sys

def find_version():
    version = sys.version
    version = version.split()[0].split('.')
    version = version[0] + '.' + version[1]
    print(version)

if __name__ == '__main__':
    find_version()

.tcl

set file "C://find_python_version.py"
set output [exec python $file]

Ответы [ 2 ]

1 голос
/ 21 апреля 2019

Я бы использовал Python's sys.version_info, потому что я могу форматировать строку версии любым способом, который мне нравится:

set pythonVersion [exec python -c {import sys; print("%d.%d.%d" % sys.version_info[:3])}]
puts "Python version: $pythonVersion"

Вывод: версия Python: 2.7.15

Пара замечаний:

  • Сценарий Python (в фигурных скобках), следующий за флагом -c, выведет версию в виде xyz, вы можете отформатировать ее любым удобным вам способом
  • Значениеиз sys.version_info - это список многих элементов, см. документацию.Меня интересуют только первые 3 элемента, поэтому sys.version_info[:3]
  • Оператор / функция print с круглыми скобками будет работать как с Python 2, так и с Python 3
1 голос
/ 18 апреля 2019

Кажется, что достаточно простой подход - проанализировать результат python --version:

proc pythonVersion {{pythonExecutable "python"}} {
    # Tricky point: Python 2.7 writes version info to stderr!
    set info [exec $pythonExecutable --version 2>@1]
    if {[regexp {^Python ([\d.]+)$} $info --> version]} {
        return $version
    }
    error "failed to parse output of $pythonExecutable --version: '$info'"
}

Тестирование в этой системе:

% pythonVersion
3.6.8
% pythonVersion python2.7
2.7.15

Выглядит нормально для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...