使用 python 检查 CMake 版本[重复]

问题描述 投票:0回答:3

我第一次构建一个项目,它真的很令人困惑。我已经通过使用 gitmodules 包含了一个项目,并且正在使用 Visual Studio,并且我想在我自己的项目中静态链接该项目。问题是该项目没有附带 Visual Studio 解决方案,因此我只能在其上运行 CMake。然而,我通过在 GitHub 上在线查看,发现人们使用脚本来运行构建所需的所有先决条件。所以我制作了批处理脚本和Python脚本,到目前为止进展顺利。

但是我在网上找不到任何地方可以展示如何使用Python获取CMake版本。

我希望Python脚本检测是否安装了CMake,如果安装了则检查其版本。

当前我的 Python 代码如下所示

if cmake --version <= 3.22.1:
    exit(1)

这给了我错误:

SyntaxError: invalid syntax

在终端中运行

cmake --version
将显示预期的版本。 “cmake 版本 3.22.1”

我正在尝试从调用中获取要在 python 中的 if 语句中使用的 CMake 版本,而不是仅在 python 中调用

cmake --version

我正在寻找一种在 python 中本地执行此操作的方法,而不是通过在 python 中调用命令行。

python windows cmake build
3个回答
2
投票

您可以像这样检查 CMake 版本是否为 3.22.1:

import subprocess
from packaging import version

def get_cmake_version():
    output = subprocess.check_output(['cmake', '--version']).decode('utf-8')
    line = output.splitlines()[0]
    version = line.split()[2]
    return(version)

if version.parse(get_cmake_version()) < version.parse("3.22.1"):
    exit(1)

get_cmake_version()
运行
cmake --version
,通过
check_output()
获取其输出。然后通过
split()
splitlines()
的组合,它会获取第一行的第三个单词并返回它。然后我们用打包模块中的
get_cmake_version()
解析
version.parse
返回的版本号,并与3.22.1进行比较。

请注意,当未安装 CMake 时,上述

subprocess.check_output()
调用会抛出 FileNotFoundError。但这没有记录在案。
check_output()
的文档说它可以抛出 CalledProcessError 但没有提到 FileNotFoundError

您可能希望使用 try/ except 来处理这两个错误。


1
投票

使用

Subprocess

subprocess = subprocess.Popen("cmake --version", shell=True, stdout=subprocess.PIPE)

subprocess_return = subprocess.stdout.read()

print(subprocess_return)

您现在在

subprocess_return
变量中拥有命令的输出, 现在你可以解析它来获取版本号。


1
投票
import subprocess
import re

try:
    msg = subprocess.Popen("cmake --version", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT).stdout.read().decode()
    # guess
    versions = msg.split()[2]
    pat = re.compile(r'[0-9]\.[0-9].+\.[0-9]')
    if pat.match(versions):
        print(versions.split("."))
    else:
        print("Invalid!")

except:
    print("Invalid!")
© www.soinside.com 2019 - 2024. All rights reserved.