所以我有数百个必须使用一个脚本运行的 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.standalonemaya.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/

10-12 19:27