【问题标题】:Running python from mel callback with Render command使用 Render 命令从 mel 回调运行 python
【发布时间】:2014-01-20 09:58:19
【问题描述】:

我需要通过终端运行批处理渲染命令,并使用 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(换行符)标志,所以根本没有缩进,除非我严重错误!

【问题讨论】:

  • 这是一个转义规则问题,您使用的是什么操作系统和什么外壳。无论如何,您可以通过使用包含文本的 python 文件来稍微简化问题

标签: python callback render maya mel


【解决方案1】:

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

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

【讨论】:

  • 编辑 Maya.env 很有效,因为我们有一台控制机器,要向 20 个奴隶发送命令,我需要在一台机器上完成这项工作,而不需要编辑其他 env 文件,所以这只是工作好的,谢谢你的建议!
猜你喜欢
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 2018-02-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2014-11-20
  • 2018-07-30
相关资源
最近更新 更多