Форум сайта python.su
тоже думал про вывод в файл и обработку уже оттуда…… сейчас займусь…
Алгоритм таков:
Нужно получать данные из строк data и metadata (и если появятся остальные такого же типа):
pool name KB objects clones degraded unfound rd rd KB wr wr KB
data 1204848704 21554221 0 0 0 139022 92444082 52702653 1550153369
metadata 45396 350388 0 0 0 1335042 3670752865 123888135 401578714
total used 4166229616 21904609
total avail 6217069744
total space 10939188688
Нужно получать значения каждого rd, rd KB, wr,wr KB(скорее всего суммировать их сразу у строк data и metadata, и остальными возможными строками) , затем сверять эти значения с теми, которые были,допустим, 5 секунд назад (запуск скрипта будет производиться в определенное позже время) и вычесть из новых - старые,записанные в файл при предыдущем запуске. Получив разницу, я получу количество байт, записанных в отведенный период времени, а из этого можно получить и скорость, и т.п.
Офлайн
nax83Оформи в виде кода (как было показано) или приложи файл к сообщению. Если постишь как текст, удаляются пробелы (не видно, где какая колонка, а высчитывать - долго).
Нужно получать значения каждого rd, rd KB, wr,wr KB
Отредактировано py.user.next (Сен. 4, 2015 17:22:45)
Офлайн
pool name KB objects clones degraded unfound rd rd KB wr wr KB data 1204848704 21554221 0 0 0 139022 92444082 52702653 1550153369 metadata 45396 350388 0 0 0 1335042 3670752865 123888135 401578714 total used 4166229616 21904609 total avail 6217069744 total space 10939188688
Отредактировано nax83 (Сен. 4, 2015 17:22:26)
Офлайн
nax83Да, терь нормально.
я правильно понял-это оформить?
Отредактировано py.user.next (Сен. 4, 2015 17:26:29)
Офлайн
немного не так, мне нужно удалить все строки, которые начинаются на pool и total, иначе я потеряю те, которые могут появиться
ну что, имею я в файле список
c = subprocess.Popen("rados df".split(" "), stdout=subprocess.PIPE, stderr=subprocess.PIPE) text = c.stdout.read() for textline in text.split("\n"): stline = textline.strip() if len(stline) > 1 and not stline.startswith('pool') and not stline.startswith('total'): stline = re.split("\s+", stline) f = open('text.txt', 'rw+') f.seek( 0) f.write(str(stline)) f.close() f=open('text.txt', 'r') print f.readlines() f.close()
['data', '1204848704', '21554221', '0', '0', '0', '139022', '92444082', '52702653', '1550153369'] ['metadata', '45396', '350388', '0', '0', '0', '1335042', '3670752865', '123888135', '401578714']
for i,line in enumerate(f): print i,line
Отредактировано nax83 (Сен. 4, 2015 17:42:03)
Офлайн
nax83Верхняя строка - заголовок, он всегда есть, поэтому можно не проверять, начинается ли он на pool.
иначе я потеряю те, которые могут появиться
Отредактировано py.user.next (Сен. 4, 2015 17:35:09)
Офлайн
nax83
Насчет удаления ненужных строк-каким способом это сделать? Если ваш способ эффективнее-тем более прошу поделиться
#!/usr/bin/env python # -*- coding: utf-8 -*- text = """\ pool name KB objects clones degraded unfound rd rd KB wr wr KB data 1204848704 21554221 0 0 0 139022 92444082 52702653 1550153369 metadata 45396 350388 0 0 0 1335042 3670752865 123888135 401578714 total used 4166229616 21904609 total avail 6217069744 total space 10939188688 """ def clean_data(lst): return lst[1:-3] def split_data(lst): return list(map(str.split, lst)) def main(): lst = text.splitlines() cleaned = clean_data(lst) splitted = split_data(cleaned) out = list(enumerate(splitted)) print out if __name__ == '__main__': main()
[guest@localhost py]$ ./kb.py
[(0, ['data', '1204848704', '21554221', '0', '0', '0', '139022', '92444082', '52702653', '1550153369']), (1, ['metadata', '45396', '350388', '0', '0', '0', '1335042', '3670752865', '123888135', '401578714'])]
[guest@localhost py]$
Отредактировано py.user.next (Сен. 4, 2015 17:52:16)
Офлайн
благодарю!
Офлайн