【问题标题】:Find python version in Tcl script在 Tcl 脚本中查找 python 版本
【发布时间】:2019-09-08 16:46:04
【问题描述】:

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

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]

【问题讨论】:

  • 解析“python -v”的输出有什么问题?
  • @stolenmoment 目前我正在调用一个打印sys.version 并解析其输出的python 脚本。想知道是否有更好的方法。
  • @TonyTannous 尝试:set output [exec python --version]

标签: tcl


【解决方案1】:

我会使用 Python 的 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

几点说明:

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

【讨论】:

    【解决方案2】:

    一个足够简单的方法似乎是解析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 脚本。
    • 一个问题,目前我用{"3.6"} 初始化了一个列表,如何将3.6.8 变成相同的类型?因为附加 3.6.8 会导致脚本稍后崩溃...
    • @TonyTannous 你可以使用像regexp -inline {^\d+\.\d+} [pythonVersion] 这样的简单正则表达式
    猜你喜欢
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-03
    • 2011-09-02
    • 2021-03-22
    相关资源
    最近更新 更多