从python shell

时间:2017-07-03 13:03:56

标签: python maya

所以我有数百个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

1 个答案:

答案 0 :(得分:4)

你走在正确的轨道上。 Maya.standalone运行Maya的无头,非gui版本,因此它非常适合批处理,但它本质上是一个命令行应用程序。除了缺少GUI之外,它与常规会话相同,因此您将拥有相同的python路径和

您希望设计批处理流程,因此不需要任何UI交互(例如,您希望确保以不会抛出对话框的方式保存或导出内容在用户)。

如果您只想要一个仅限命令行的maya,这将允许您以交互方式运行会话:

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

应该对一堆文件进行一些操作,并报告哪些文件成功,哪些文件因为什么原因而失败