我正在尝试用这个简单的代码编写 - 它检查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年?
答案 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]
这将解决您的问题。
有人说:
不建议使用eval。您可以阅读here更多有关原因的信息。
也不建议以这种方式解析输出字符串,因为您的代码不易受输出格式的更改影响。我会尝试找到一种不同的方式来获取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)
希望有所帮助!