You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Maya的kBeforeOpen回调中获取待打开文件名称

如何在Maya打开文件前获取待打开的文件名

你遇到的问题很典型——kBeforeOpen 属于 MSceneMessage 回调,它的触发时机是当前场景即将被新内容替换,但它并不会把待打开的文件路径作为参数传递给回调函数。所以你用 cmds.file(q=True, sn=True) 查询到的只是还没被替换的当前场景名称(空场景自然就是空字符串)。

要解决这个问题,你需要换用 MFileMessage 下的 kBeforeOpenFile 回调,这个回调专门负责在文件打开前触发,并且会把待打开的文件路径直接作为参数传递给你的回调函数。

正确的代码示例

import maya.OpenMaya as om

def before_open_file(file_path, *args):
    # file_path 就是即将打开的文件的完整路径
    print('即将打开的文件:', file_path)

# 注册回调
callback_id = om.MFileMessage.addCallback(om.MFileMessage.kBeforeOpenFile, before_open_file)

当你打开 C:/tmp/pen_01.mb 时,这个回调会直接输出:

即将打开的文件: C:/tmp/pen_01.mb

额外提示

如果你之后需要移除这个回调(避免内存泄漏),可以调用:

om.MFileMessage.removeCallback(callback_id)

为什么不推荐用命令历史解析?

有些开发者会尝试通过解析最近的 file 命令来获取路径,但这种方法非常不可靠——比如用户通过脚本调用打开文件、或者命令历史被清空时,这种方法就会失效。所以优先使用官方提供的 MFileMessage 回调是最稳妥的方案。

内容的提问来源于stack exchange,提问作者Massimo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:41:53