python 用于获取 stracer 输出的正则表达式模式

python regex pattern to get stracer output

write(1, "(B[0;1m[90m3.8[4;52H", 24) = 24

我想获取 () () 之前的字符串和 =

之后的数字之间的每个值

有时可以是 -#

输出样本

close(4)                                = 0

openat(AT_FDCWD, "/proc/9392/statm", O_RDONLY) = 4

read(4, "2387 878 750 226 0 163 0\n", 512) = 25

read(4, "", 487)                        = 0

close(4)                                = 0

openat(AT_FDCWD, "/proc/9392/stat", O_RDONLY) = 4

read(4, "9392 (strace) S 9330 9330 9 3481"..., 2048) = 319

read(4, "", 1729)                       = 0

close(4)                                = 0

openat(AT_FDCWD, "/proc/9407/task", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4

我尝试过的:

对于参数

"(.*?)"

开头的字符串

(.*?)\(

我只需要号码。

是否有更有效的方式来处理我正在做的事情?

不太确定你到底在找什么,但这似乎有效:

import re


pattern = re.compile(r"(.*)\((.*)\)\s*=\s*(.*)")


lines = ['close(4)                                = 0',
         'openat(AT_FDCWD, "/proc/9392/statm", O_RDONLY) = 4',
         'read(4, "2387 878 750 226 0 163 0\n", 512) = 25',
         'read(4, "", 487)                        = 0',
         'close(4)                                = 0',
         'openat(AT_FDCWD, "/proc/9392/stat", O_RDONLY) = 4',
         'read(4, "9392 (strace) S 9330 9330 9 3481"..., 2048) = 319',
         'read(4, "", 1729)                       = 0',
         'close(4)                                = 0',
         'openat(AT_FDCWD, "/proc/9407/task", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 4']


for line in lines:
    print(pattern.findall(line)

输出:

[('close', '4', '0')]
[('openat', 'AT_FDCWD, "/proc/9392/statm", O_RDONLY', '4')]
[('read', '4, "2387 878 750 226 0 163 0\n", 512', '25')]
[('read', '4, "", 487', '0')]
[('close', '4', '0')]
[('openat', 'AT_FDCWD, "/proc/9392/stat", O_RDONLY', '4')]
[('read(4, "9392 ', 'strace) S 9330 9330 9 3481"..., 2048', '319')]
[('read', '4, "", 1729', '0')]
[('close', '4', '0')]
[('openat', 'AT_FDCWD, "/proc/9407/task", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY', '4')]