Как сделать периодический забор данных (текстовых) от внешней консольной программы на Python?



@TSerge

День добрый,

есть консольная программа, например, traceroute или подобная другая, которая периодически (раз в секунду) выдаёт в консоль , текстовый вывод, выходные данные. В течении n секунд, например, 10 сек, потом завершается. Есть необходимость раз в секунду делать как-бы «снимок» её выходных данных, к примеру, на коноль выдаются результаты:

1 1.2.3.4 — 40 ms
2 10.11.22.33 — 50 ms
3 44.44.33.55 — 3 ms

периодичеки данные меняются, или

download: 30 mbit/s
download: 10 mbit/s
download: 100 mbit/s

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

Подкажите, как правильнее или какие есть способы периодичекого опроса, захвата выводимой текстовой информации от внешней программы и завершение по окончании работы этой программы?
Может есть какие-то модули для python?

Спасибо.


Решения вопроса 0


Ответы на вопрос 1



@alexzav2

как вариант написать запуск консольной команды из Python и получать результаты
вот когда-то пробовал:
#from time import sleep, time
import time

from datetime import datetime
import subprocess

ip_test="192.168.0.1"
name_file="logsss.txt"
sleep = 3

# -----------------------------------------
def get_cmd(com=""):
    res = subprocess.check_output(com).decode("cp866")
    return res

# -----------------------------------------
def text_in_file(str):
    global name_file
    with open(name_file,'a') as file:
        file.write(str+'\n')
    
#print(' -------------------------------------------')
while True:
    time.sleep(sleep)
    result = get_cmd('ping ' + ip_test + ' -n 2')
    #print(result)
    #print(' -----------------------------------------')
    if 'Заданный узел недоступен' in result:        
        s = time.strftime('%H %M %S')+ '  Потери'        
        print(s)        
        text_in_file(s)        
    else:
        print(time.strftime('%H %M %S') + ' ok')

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *