Найти - Пользователи
Полная версия: Проблема с кодом, нужна помощь
Начало » Центр помощи » Проблема с кодом, нужна помощь
1 2
nax83
тоже думал про вывод в файл и обработку уже оттуда…… сейчас займусь…

Алгоритм таков:
Нужно получать данные из строк 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 секунд назад (запуск скрипта будет производиться в определенное позже время) и вычесть из новых - старые,записанные в файл при предыдущем запуске. Получив разницу, я получу количество байт, записанных в отведенный период времени, а из этого можно получить и скорость, и т.п.
py.user.next
nax83
Нужно получать значения каждого rd, rd KB, wr,wr KB
Оформи в виде кода (как было показано) или приложи файл к сообщению. Если постишь как текст, удаляются пробелы (не видно, где какая колонка, а высчитывать - долго).

Вот ты пишешь “rd, rd KB, wr,wr KB”, разделяя их запятыми, а в той таблице не видно, что они разделены, потому что ты когда копировал вывод, там были пробелы, которые отделяли колонки друг от друга, а при отправке на форум они удалились, потому что форум удаляет лишние символы, которые он считает неважными для чтения.

Вот чтобы он не удалял, надо либо теги применить, тогда он точно передаёт, либо ещё лучше - приложить к сообщению файл с данными, потому что теги тут криво работают (удаляют пустые строки).
nax83
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

я правильно понял-это оформить?
py.user.next
nax83
я правильно понял-это оформить?
Да, терь нормально.

Значит, сначала нужно удалить ненужные строки из этих данных до начала обработки (почистить данные). Это удалить первую строку и последние три.
nax83
немного не так, мне нужно удалить все строки, которые начинаются на 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
выдает обе строки как нулевые, т.е. как изначально у меня было и без сохранения в файл. Чую, я недочитал чего-то…
Насчет удаления ненужных строк-каким способом это сделать? Если ваш способ эффективнее-тем более прошу поделиться
py.user.next
nax83
иначе я потеряю те, которые могут появиться
Верхняя строка - заголовок, он всегда есть, поэтому можно не проверять, начинается ли он на pool.
Нижние строки описывают общее количество, подсчитанное из строк, которые в середине.
Поэтому новые строки могут появляться только в середине (область списка пулов).
(Поэтому-то и не обязательно накладывать условие, что они должны начинаться с определённых слов, так как они точно идентифицируются позиционно.)
py.user.next
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]$
nax83
благодарю!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB