在Tcl脚本中查找python版本

在Tcl脚本中查找python版本,tcl,Tcl,是否可以在.tcl脚本中找到安装的python版本?换句话说,如何从.tcl脚本判断默认路径中的python版本 没有包含关于此的有用信息 目前,我正在调用一个python脚本,该脚本打印sys.version并解析其输出 .py import sys def find_version(): version = sys.version version = version.split()[0].split('.') version = version[0] + '.' +

是否可以在.tcl脚本中找到安装的python版本?换句话说,如何从.tcl脚本判断默认路径中的python版本

没有包含关于此的有用信息

目前,我正在调用一个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]

一种非常简单的方法似乎是解析
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

在我看来还可以。

一种足够简单的方法似乎是解析
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

我觉得还可以。

我会使用Python的
sys.version\u info
,因为我可以用我喜欢的任何方式格式化版本字符串:

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

几点注意:

  • -c
    标志后面的Python脚本(用大括号括起来)将以x.y.z的形式打印出版本,您可以按自己喜欢的方式对其进行格式化
  • sys.version\u info
    的值是许多元素的列表,请参阅文档。我只对前3个元素感兴趣,因此
    sys.version\u info[:3]
  • 带括号的
    print
    语句/函数将同时适用于Python 2和Python 3

我会使用Python的
sys.version\u info
,因为我可以用我喜欢的任何方式格式化版本字符串:

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

几点注意:

  • -c
    标志后面的Python脚本(用大括号括起来)将以x.y.z的形式打印出版本,您可以按自己喜欢的方式对其进行格式化
  • sys.version\u info
    的值是许多元素的列表,请参阅文档。我只对前3个元素感兴趣,因此
    sys.version\u info[:3]
  • 带括号的
    print
    语句/函数将同时适用于Python 2和Python 3

解析“python-v”的输出有什么问题?@stolenmoment目前我正在调用一个python脚本,该脚本打印
sys.version
并解析其输出。我想知道是否有更好的方法。@TonyTannous try:
set output[exec python--version]
解析“python-v”的输出有什么问题?@stolenmoment目前我正在调用一个python脚本,该脚本打印
sys.version
,并解析其输出。我想知道是否有更好的方法。@TonyTannous try:
设置输出[exec python--version]
作为奖励,它不需要帮助程序python脚本。一个问题是,目前我使用
{“3.6”}
初始化列表,如何将
3.6.8
转换为相同的类型?因为追加
3.6.8
会导致脚本稍后崩溃…@TonyTannous您可以使用一个简单的正则表达式,比如
regexp-inline{^\d+\.\d+}[pythonVersion]
可能是一个额外的好处,它不需要帮助程序Python脚本如何将
3.6.8
转换为相同类型?因为追加
3.6.8
会导致脚本稍后崩溃…@TonyTannous您可以使用一个简单的正则表达式,比如
regexp-inline{^\d+\.\d+}[pythonVersion]