在修改 ~/.openclaw/openclaw.json 配置文件后,快速验证 JSON 格式是否正确,避免因格式错误导致 OpenClaw Gateway 启动失败。
bashpython3 -c "import json; json.load(open('路径'))" && echo "JSON OK"
python#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
批量提取文华TYPES目录下所有 .XTRD 文件中的麦语言代码
用法:python extract_all_types.py [源目录] [输出目录]
若不指定参数,默认源目录为当前目录,输出目录为当前目录下的 WH8_MQL
"""
import os
import re
import sys
def extract_code_from_xtrd(file_path: str) -> str:
"""从 .XTRD 文件中提取 <CODE> 标签内的代码"""
try:
# 尝试用 GBK 编码读取(文华默认中文编码)
with open(file_path, 'r', encoding='gbk', errors='ignore') as f:
content = f.read()
except Exception as e:
print(f"❌ 读取文件失败 {file_path}: {e}")
return None
# 正则匹配 <CODE>...</CODE>,支持多行和空白
match = re.search(r'<CODE>\s*(.*?)\s*</CODE>', content, re.DOTALL)
if not match:
# 有些文件可能没有 CODE 标签,跳过
return None
code = match.group(1).strip()
# 处理可能存在的 HTML 实体(极少情况)
code = code.replace('<', '<').replace('>', '>').replace('&', '&')
return code
def process_directory(src_dir: str, dst_dir: str):
"""递归处理目录,保持文件夹结构"""
if not os.path.isdir(src_dir):
print(f"❌ 源目录不存在: {src_dir}")
return
count = 0
for root, dirs, files in os.walk(src_dir):
# 计算相对路径
rel_path = os.path.relpath(root, src_dir)
if rel_path == '.':
target_dir = dst_dir
else:
target_dir = os.path.join(dst_dir, rel_path)
# 确保目标目录存在
os.makedirs(target_dir, exist_ok=True)
for file in files:
if not file.lower().endswith('.xtrd'):
continue
src_file = os.path.join(root, file)
code = extract_code_from_xtrd(src_file)
if code is None:
print(f"⚠️ 跳过(无CODE标签): {rel_path}/{file}")
continue
# 生成输出文件名:去掉 .XTRD 后缀,加上 .mql
base_name = file[:-5] if file.lower().endswith('.xtrd') else file
safe_name = re.sub(r'[\\/*?:"<>|]', '_', base_name)
out_file = os.path.join(target_dir, f"{safe_name}.mql")
with open(out_file, 'w', encoding='utf-8') as f:
f.write(code)
count += 1
print(f"✅ 已提取: {rel_path}/{safe_name}.mql")
print(f"\n🎉 提取完成!共处理 {count} 个文件,保存至: {dst_dir}")
if __name__ == '__main__':
# 默认源目录为当前脚本所在目录,输出为同级 WH8_MQL
default_src = os.getcwd()
default_dst = os.path.join(default_src, 'WH8_MQL')
if len(sys.argv) >= 3:
src = sys.argv[1]
dst = sys.argv[2]
elif len(sys.argv) == 2:
src = sys.argv[1]
dst = os.path.join(os.path.dirname(src), 'WH8_MQL')
else:
src = default_src
dst = default_dst
print(f"📂 源目录: {src}")
print(f"📁 输出目录: {dst}")
print("-" * 50)
process_directory(src, dst)
本文作者:苏皓明
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!