所以我有数百个必须使用一个脚本运行的 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()
看起来它加载了 sth,因为我可以看到我的脚本从自定义路径加载。但是,它不会使 maya.exe 运行。
欢迎任何帮助,因为我从未做过这种 Maya python 外部事情。
附言使用 Maya 2015 和 python 2.7.3
最佳答案
你走在正确的轨道上。 Maya.standalone
运行 headless 、非 gui 版本的 Maya,因此它非常适合批处理,但它本质上是一个命令行应用程序。除了缺少 GUI 之外,它与常规 session 相同,因此您将拥有相同的 python 路径和
您需要设计批处理,使其不需要任何 UI 交互(例如,您要确保以不会向用户抛出对话框的方式保存或导出内容)。
如果您只想要一个仅限命令行的 Maya,这将让您以交互方式运行 session :
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
哪个应该对一堆文件做一些操作,并报告哪些成功,哪些失败原因是什么
关于python - 从 python shell 运行 Maya,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44886329/