Maya 2020:统计MLdeleteUnused成功删除的材质数量
Maya 2020批量操作成功数统计方案
在Maya 2020(Python 2.7环境)中,针对MLdeleteUnused()这类无法直接获取返回结果的批量操作,可通过捕获脚本编辑器输出并解析的方式统计成功操作数,同时排除软件bug导致的失败项,且该方案可复用至其他同类操作。
实现思路
- 清空脚本编辑器历史,避免旧输出干扰统计
- 执行目标批量操作
- 提取脚本编辑器的输出内容
- 通过正则匹配区分成功操作行与报错行,排除失败节点后计算成功数
通用统计代码
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
相关产品推荐
相关产品推荐

