LINUX.ORG.RU

Парсинг значения на Python

 


0

2

Всем привет, пишу метрику для системы мониторинга. Но не могу выдернуть нужное мне значение из полученной строки.

#!/usr/bin/python
import os, httplib, urllib, time
api_key = 'fd40a213-552b-4843-8g82-29ce78e217er'
page_id = 'jqn5z3452dhm'
metric_id = 'cxn1222342kv0'
api_base = 'api.statuspage.io'

total_points = (60 / 5 * 24)
for i in range(total_points):
        ts = int(time.time()) - (i * 5 * 60)
        hostname = "my_domain" 
        responset = os.system("ping -c 2 -n " + hostname)
        params = urllib.urlencode({'data[timestamp]': ts, 'data[responset]': responset})
        headers = {"Content-Type": "application/x-www-form-urlencoded", "Authorization": "OAuth " + api_key}

        conn = httplib.HTTPSConnection(api_base)
        conn.request("POST", "/v1/pages/" + page_id + "/metrics/" + metric_id + "/data.json", params, headers)
        response = conn.getresponse()
        print "Submitted point " + str(i + 1) + " of " + str(total_points)
        time.sleep(1)

Соответственно получаю:

--- my_domain ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.199/0.206/0.213/0.007 ms

Соответственно как достать значение 0.007 ? Спасибо!

Соответственно как достать значение 0.007 ?

text = '''
--- my_domain ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.199/0.206/0.213/0.007 ms
'''

print(text.split('/')[-1])

0.007 ms

vvn_black ★★★★★ ()

responset = os.system(«ping -c 2 -n » + hostname)

лучше используй subprocess для запуска внешнего, а лучше найти путь запускать все это средствами питона

Dred ★★★★★ ()
"/v1/pages/" + page_id + "/metrics/" + metric_id + "/data.json"

Вот так лучше

ggrn ★★★★★ ()

У вас есть проблема. Вы решили использовать регулярные выражения чтобы её решить. Теперь у вас две проблемы.

На самом деле регулярки вполне ничего (но надо собрать образцы и слать ворнинги если регулярка обламалась)

demrnd ()

все твое сообщение не читал.

как достать значение 0.007 ? Спасибо!

как вариант:

>>> s = "rtt min/avg/max/mdev = 0.199/0.206/0.213/0.007 ms"
>>> import re
>>> float(re.findall('(([\d\.]+)\/?)', s)[3][0])
0.007

entemophyllon ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.