Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| beb4fb6a76 |
@@ -64,13 +64,36 @@ class OpenClawClient:
|
||||
raise Exception(f"CLI error: {result.stderr}")
|
||||
|
||||
# 解析 JSON 输出(跳过警告)
|
||||
lines = result.stdout.strip().split("\n")
|
||||
json_lines = [l for l in lines if l.startswith("{") or l.startswith("[")]
|
||||
# OpenClaw 输出格式化的多行 JSON,需要提取完整的 JSON 对象
|
||||
output = result.stdout.strip()
|
||||
|
||||
if json_lines:
|
||||
return json.loads(json_lines[-1])
|
||||
# 找到 JSON 开始位置
|
||||
json_start = -1
|
||||
for i, char in enumerate(output):
|
||||
if char == '{' or char == '[':
|
||||
json_start = i
|
||||
break
|
||||
|
||||
return {}
|
||||
if json_start == -1:
|
||||
return {}
|
||||
|
||||
# 提取 JSON 部分
|
||||
json_str = output[json_start:]
|
||||
|
||||
try:
|
||||
return json.loads(json_str)
|
||||
except json.JSONDecodeError:
|
||||
# 如果失败,尝试其他方法
|
||||
lines = output.split("\n")
|
||||
json_lines = [l for l in lines if l.strip().startswith("{") or l.strip().startswith("[")]
|
||||
if json_lines:
|
||||
# 尝试解析每一行
|
||||
for line in json_lines:
|
||||
try:
|
||||
return json.loads(line)
|
||||
except:
|
||||
continue
|
||||
return {}
|
||||
except subprocess.TimeoutExpired:
|
||||
raise Exception(f"Timeout running: {cmd}")
|
||||
except json.JSONDecodeError as e:
|
||||
|
||||
Reference in New Issue
Block a user