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

Maya 2020:统计MLdeleteUnused成功删除的材质数量

Maya 2020批量操作成功数统计方案

在Maya 2020(Python 2.7环境)中,针对MLdeleteUnused()这类无法直接获取返回结果的批量操作,可通过捕获脚本编辑器输出并解析的方式统计成功操作数,同时排除软件bug导致的失败项,且该方案可复用至其他同类操作。

实现思路

  1. 清空脚本编辑器历史,避免旧输出干扰统计
  2. 执行目标批量操作
  3. 提取脚本编辑器的输出内容
  4. 通过正则匹配区分成功操作行与报错行,排除失败节点后计算成功数

通用统计代码

import pymel.core as pm
import re

def count_successful_operations(execute_func, success_pattern, error_node_pattern):
    # 清空脚本编辑器历史
    pm.scriptEditorInfo(clearHistory=True)
    # 执行目标操作
    execute_func()
    # 获取所有输出行
    output_lines = pm.scriptEditorInfo(query=True, history=True)
    
    # 提取所有标记为成功操作的节点
    success_nodes = []
    for line in output_lines:
        match = re.match(success_pattern, line)
        if match:
            success_nodes.append(match.group(1))
    
    # 提取报错中提到的失败节点
    error_nodes = []
    for line in output_lines:
        match = re.search(error_node_pattern, line)
        if match:
            error_nodes.append(match.group(1))
    
    # 计算实际成功数:移除失败节点后的数量
    successful_count = len([node for node in success_nodes if node not in error_nodes])
    return successful_count, success_nodes, error_nodes

删除未使用材质的示例

# 定义要执行的删除操作
def run_delete_unused():
    pm.mel.MLdeleteUnused()

# 匹配规则:根据输出格式调整正则
# 匹配成功删除行:delete "节点名";
success_regex = r'delete "([^"]+)";'
# 匹配报错中的失败节点:Non-deletable node '节点名'
error_regex = r"Non-deletable node '([^']+)'"

# 执行统计
count, successes, errors = count_successful_operations(run_delete_unused, success_regex, error_regex)
print("成功删除的材质数量:{}".format(count))
print("成功删除节点:{}".format(successes))
print("删除失败节点:{}".format(errors))

复用说明

针对其他批量操作,只需:

  • 替换execute_func为对应的操作函数(比如批量导入、重命名资产的函数)
  • 调整success_pattern和error_node_pattern的正则表达式,匹配目标操作的成功输出行与报错节点格式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:18:09