在MS里使用Py的lib
bi = Python.Import "__builtin__"
bi.pow 2 3
"__builtin__"应该就是Python的内置package。
在PY里,pow()是这么用的
pow(2, 3)
但是ms里函数调用直接在后面写上实参就好,不需要括号
如果需要重新加载一下已经import的module,用?:
python.reload bi
在MS里使用Py的复合类型(列表,元组,字典,类)
注意:在MS里数组的下标是从1开始的。
这里测试(环境:Max2017)看到了一个不一样的结果,表示懵逼!
下面这张图是HelpDoc里的栗子,tp[0]的返回值是1,也就是说还是遵循着py的规则,数组元组等从0开始下标
但是下面是我测试的结果,tp[0]返回了3,是元组的最后一位。
然后我又测试了tp[1],tp[2],tp[3]分别返回1, 2, 3。。。。
然后我想在py里tp[-1]返回的是元组的最后一位。。。可惜,测试的结果是倒数第二位,因为倒数第一位的下标是0,上面已经验证了。
这个分歧不知道是文档写错了,还是max的bug?
接下来看一下字典类型
声明一个字典
d = bi.dict one:1 two:2 three:3
像字典里添加
d["five"] = 5
上面说有个bug。我又重新看了一下doc,有这么一句话
Python lists passed to MAXScript are 1-based.
传给MS的py列表是从1开始的。就是说,从py传回给ms的列表是从1开始的。
我还是没有理解这句话。
官方的?
str = python.import("string")
mystrlist = str.split("an example string")
mystrlist[1]
-- prints "an"
是,的确是print了一个an,但是上面的tp[0]返回值怎么去理解。
如果我想在ms里直接运行Py代码怎么办?
python.execute "print 'Hello'"
是的,在py2.7里print一个Hello就是这么写的
print 'Hello'
那么在ms里只需要在python.execute后面把py的语句变成string即可
但是一定要注意max里的py是2.7的版本。
另外在py2.7里print一个Hello也可以这么写:
print "Hello"
那在ms里调用py这条语句是不是就需要考虑一下转义字符了呢。
python.execute "print \"Hello\""
对于python.ExecuteFile这个命令是一样的。后面跟一个带扩展名的文件名的字符串就可以了
如果这个文件名不是一个全路径。那么max会在下面的路径中找你的py脚本。
- User Scripts directory
- User Startup Scripts directory
- Scripts directory
- Startup Scripts
- 以及系统的path路径
这里要Note一下:
1.Ms大小写不明感
2.Py在ms里运行不是thread-safe。py的命令总是在max的主线程上运行。所以你不要尝试使用多线程。