【发布时间】:2016-03-21 18:23:43
【问题描述】:
我需要对我们从客户那里收到的一些 Maya 场景进行整合,以使它们与我们的流程兼容。显然,我想批量处理该操作,并要求我从 Maya 中启动该过程。
我已经尝试了两种方法(彼此非常相似),这两种方法都有效,但问题是 Maya GUI 会冻结,直到该过程完成。我希望这个过程对用户来说是完全透明的,这样他们就可以保持工作状态,并且在完成后只有一条消息。
以下是我迄今为止尝试和发现的内容:
这个教程在这里:http://www.toadstorm.com/blog/?p=136 引导我写这个并保存它:
filename = sys.argv[1]
def createSphere(filename):
std.initialize(name='python')
try:
mc.file(filename, open=True, pmt=False, force=True)
sphere = mc.polySphere() [0]
mc.file(save=True, force=True)
sys.stdout.write(sphere)
except Exception, e:
sys.stderr.write(str(e))
sys.exit(-1)
if float(mc.about(v=True)) >= 2016.0:
std.uninitialize()
createSphere(filename)
然后以这种方式从 Maya 中调用它:
mayapyPath = 'C:/Program Files/Autodesk/Maya2016/bin/mayapy.exe'
scriptPath = 'P:/WG_MAYA_Users/lbouet/scripts/createSphere.py'
filenames = ['file1', 'file2', 'file3', 'file4']
def massCreateSphere(filenames):
for filename in filenames:
maya = subprocess.Popen(mayapyPath+' '+scriptPath+' '+filename,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out,err = maya.communicate()
exitcode = maya.returncode
if str(exitcode) != '0':
print(err)
print 'error opening file: %s' % (filename)
else:
print 'added sphere %s to %s' % (out,filename)
massCreateSphere(filenames)
它工作正常,但就像我说的,冻结 Maya GUI 直到过程结束。而且它只是为了创建一个球体,所以几乎没有接近我在场景中实际必须执行的所有动作。
我还尝试通过调用 mayabatch 的 .bat 文件运行第一个脚本并运行脚本,同样的问题。
我发现这个帖子 (Running list of cmd.exe commands from maya in Python) 似乎正是我想要的,但我看不出如何适应我的情况?
据我了解,这个问题可能来自循环调用 Popen (即多次),但我真的不知道该怎么做......我在想也许将第二个脚本也保存在磁盘上的某个地方并调用它一个来自玛雅?
【问题讨论】:
标签: python python-2.7 maya