所以我有数百个maya文件必须用一个脚本运行。所以我在想为什么我甚至不得不打开maya,我应该可以从python shell(不是maya中的python shell,windows中的python shell)来实现它。
所以这个想法是:
fileList = ["....my huge list of files...."]
for f in fileList:
openMaya
runMyAwesomeScript
我发现了这个:
C:\Program Files\Autodesk\Maya201x\bin\mayapy.exe
maya.standalone.initialize()
看起来它加载了,因为我可以看到我的脚本从自定义路径加载。但是它不会使maya.exe运行。
任何帮助都是受欢迎的,因为我从未做过这种maya python外部事情。
P.S。使用maya 2015和python 2.7.3
答案 0 :(得分:4)
你走在正确的轨道上。 Maya.standalone
运行Maya的无头,非gui版本,因此它非常适合批处理,但它本质上是一个命令行应用程序。除了缺少GUI之外,它与常规会话相同,因此您将拥有相同的python路径和
您希望设计批处理流程,因此不需要任何UI交互(例如,您希望确保以不会抛出对话框的方式保存或导出内容在用户)。
如果您只想要一个仅限命令行的maya,这将允许您以交互方式运行会话:
mayapy.exe -i -c "import maya.standalone; maya.standalone.initialize()"
如果您要运行脚本,请在顶部包含import maya.standalone
和maya.standalone.initialize()
,然后在您要执行的任何工作中添加。然后从命令行运行它,如下所示:
mayapy.exe "path/to/script.py"
据推测,您可能希望在该脚本中包含要处理的文件列表,并让它一次只能通过它们进行咀嚼。像这样:
import maya.standalone
maya.standalone.initialize()
import maya.cmds as cmds
import traceback
files = ['path/to/file1.ma'. '/path/to/file2.ma'.....]
succeeded, failed = {}
for eachfile in files:
cmds.file(eachfile, open=True, force=True)
try:
# real work goes here, this is dummy
cmds.polyCube()
cmds.file(save=True)
succeeded[eachfile] = True
except:
failed[eachfile] = traceback.format_exc()
print "Processed %i files" % len(files)
print "succeeded:"
for item in succeeded:
print "\t", item
print "failed:"
for item, reason in failed.items():
print "\t", item
print "\t", reason
应该对一堆文件进行一些操作,并报告哪些文件成功,哪些文件因为什么原因而失败