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

如何用Python正则表达式提取strace输出中的系统调用及返回值

解决方案

核心实现思路

不用分开多次运行正则匹配,直接用单条正则一次性捕获三个目标分组,处理效率最高,规则也更严谨。

正则规则

^(\w+)\((.*)\)\s*=\s*(-?\d+)$

各分组含义:

  • 第一个分组(\w+):匹配括号前的系统调用名称,仅匹配字母、数字、下划线,规避无关特殊字符
  • 第二个分组(.*):贪婪匹配左右括号之间的所有参数内容,适配参数内部含括号、引号的场景(strace输出格式固定,参数结束的右括号后必然跟等号,贪婪匹配不会出现误判)
  • 第三个分组(-?\d+):匹配等号后的返回值,兼容负号开头的错误返回值
  • 中间的\s*自动适配strace输出中为了对齐添加的任意数量空格

Python 示例代码

import re

# 预编译正则,处理大体积日志时效率更高
strace_pattern = re.compile(r'^(\w+)\((.*)\)\s*=\s*(-?\d+)$')

# 逐行处理strace输出
with open("strace.log", "r", encoding="utf-8") as f:
    for line in f:
        line = line.strip()
        if not line:
            continue
        match_res = strace_pattern.match(line)
        if match_res:
            syscall_name = match_res.group(1)
            args_str = match_res.group(2)
            return_value = int(match_res.group(3))
            # 此处可自行添加字段存储、过滤逻辑
            print(f"调用名:{syscall_name},参数:{args_str},返回值:{return_value}")

可选:参数拆分

如果需要把提取到的参数字符串拆分为单个参数,可以用Python内置shlex模块自动处理引号、转义符,避免误拆分引号内的逗号:

import shlex
# 把参数字符串转为单个参数的列表
args_list = shlex.split(args_str.replace(',', ' '))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:03