0

我需要通过终端运行批处理渲染命令,并使用 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_scripts/run_os.py,我有这个小小的脚本。

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

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

4

1 回答 1

1

这可能是因为您要求 shell 命令运行包含换行符的参数。尝试将脚本放入 mel 文件中(在渲染机器的脚本目录中),然后直接获取它。或者,如果失败,请通过编辑环境变量或在 Maya.env 中设置它来确保渲染机器具有正确的 sys 路径。

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

于 2014-01-03T20:09:26.667 回答