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')]
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')]