使用Render命令从mel回调运行python

使用Render命令从mel回调运行python,python,callback,render,maya,mel,Python,Callback,Render,Maya,Mel,我需要通过终端运行批渲染命令,并使用mel回调来运行python模块 我使用的终端命令如下: Render -preRender "python(\"import sys\nsys.path.append(\"/Volumes/raid/farm_script/\")\nfrom run_os import Farm\nFarm()\")" "/path/to/scene.mb"; 本质上,转义字符串中的命令应如下读取: import sys sys.path.append("/Volumes

我需要通过终端运行批渲染命令,并使用mel回调来运行python模块

我使用的终端命令如下:

Render -preRender "python(\"import sys\nsys.path.append(\"/Volumes/raid/farm_script/\")\nfrom run_os import Farm\nFarm()\")" "/path/to/scene.mb";
本质上,转义字符串中的命令应如下读取:

import sys
sys.path.append("/Volumes/raid/farm_script/")
from run_os import Farm
Farm()
在Maya的脚本编辑器中,在python选项卡中运行上述命令时,会打印数据

运行完全相同的脚本,在mel选项卡中,但包装在python函数中,也可以正常工作

/Volumes/raid/Farm\u scripts/run\u os.py
下的“Farm”类中,我有一个小小的脚本

class Farm():
    def __init__(self):
        self.run()
    def run(self, *args):
        print "=== TEST ===\n"

我在脚本编辑器中看到了我的打印测试,但是在批处理渲染终端中使用MEL回调运行此命令时,会留下一个“意外缩进错误”,经过严格测试后,我发现它来自run_os import Farm的
,所以我的问题是,为什么这一行会产生缩进错误,因为我使用的是
\n
(新行)标志,所以根本没有缩进,除非我弄错了

这可能是因为您要求shell命令运行包含换行符的参数。尝试将脚本放入mel文件中(在渲染机的脚本目录中),然后仅查找该文件。否则,请通过编辑环境变量或在Maya.env中进行设置,确保渲染计算机具有正确的sys路径


如果事情比这更复杂,您可以通过启动Maya.standalone并从外部控制它,从Python完成整个工作。如果你这样做,你可以添加一个简单的服务器,它使用套接字或wsgi通过网络或本地接受命令。

这是一个转义规则问题,你使用的是什么操作系统和什么shell。无论如何,你可以通过使用一个包含编辑Maya.env的文本的python文件来简化这个问题,因为我们有一个控制机器,可以向20个从机发送命令,我需要从一台机器上完成这项工作,而不编辑其他env文件,所以这很好,谢谢你的建议!