版本检查失败

时间:2014-05-26 11:32:09

标签: python maya

我正在尝试用这个简单的代码编写 - 它检查Maya版本,如果是真的,它将执行以下主要功能。

这是代码:

if int(mel.eval('about -v')[0:4]) < 2011:
    ...

然后我收到以下错误:

ValueError: invalid literal for int() with base 10: 'Exte'
[Renaming] invalid literal for int() with base 10: 'Exte'

因此,当我运行此代码来检查我拥有的Maya版本:mc.about( v = True )时,显示的结果为Extension for Autodesk Maya 2014 Service Pack 2 P03,因此就是错误。我知道上次当我以相同的方式进行版本检查时,它显示为M2014

因此,有什么方法可以将当前版本字符串恢复为2014年?

3 个答案:

答案 0 :(得分:1)

使用re查找年份:

import re
m1 = re.search(r'\d{4}', s1)
i = m1.group()
print int(i)
2014

s2 = "M2014"
m2 = re.search(r'\d{4}', s2)
j = m2.group()
print int(j)
2014

s3 = "Extension for Autodesk Maya M2014 Service Pack 2 P03"
m3 = re.search(r'\d{4}', s3)
k= m3.group()
print int(k)
2014

看一下ast helpers,使用它比使用eval更好。

ast.literal_eval(node_or_string) 安全地评估表达式节点或包含Python表达式的Unicode或Latin-1编码的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串,数字,元组,列表,dicts,布尔值和None。 这可用于安全地评估包含来自不受信任来源的Python表达式的字符串,而无需自己解析值

答案 1 :(得分:0)

根据你的说法,这是输出:

mel.eval('about -v')

Autodesk Maya 2014 Service Pack 2 P03的扩展

然后取代前4个字符:[0:4]取28-32个字符。像这样[28:32]

这将解决您的问题。

有人说:

  1. 不建议使用eval。您可以阅读here更多有关原因的信息。

  2. 也不建议以这种方式解析输出字符串,因为您的代码不易受输出格式的更改影响。我会尝试找到一种不同的方式来获取Maya的版本。

答案 2 :(得分:0)

你可以使用about命令重新搜索它的版本x64。

import maya.cmds as cmds
import re

if __name__ == '__main__':

    version = cmds.about(version=True)
    match = re.search(r'\d+', version)

    print match.group(0)

希望有所帮助!