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

Добрый день,

У меня есть консольная программа, например, traceroute, которая выводит текстовые данные в консоль каждую секунду в течение определенного времени, например, 10 секунд. Я хотел бы периодически "снимать" эти выходные данные и сохранять их. Как я могу сделать это эффективно с использованием Python? Есть ли подходящие модули или методы для этого?

Спасибо.
  • 14 декабря 2023 г. 21:36
Ответы на вопрос 2
Для организации регулярного сбора текстовых данных из внешней консольной программы в Python, вы можете использовать модуль subprocess для запуска внешней программы и получения ее вывода. Затем вы можете использовать модуль time для внесения задержки между сбором данных.

Вот пример кода, который показывает, как это можно сделать:

import subprocess
import time

# Запуск внешней консольной программы
process = subprocess.Popen('traceroute google.com', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

# Чтение вывода программы
while True:
    output = process.stdout.readline().decode()
    if output == '' and process.poll() is not None:
        break
    if output:
        # Сохранение вывода в файл
        with open('output.txt', 'a') as file:
            file.write(output)
    time.sleep(1)  # Задержка в 1 секунду

В этом примере используется команда 'traceroute google.com' для запуска внешней консольной программы, но вы можете заменить ее на вашу собственную команду. Кроме того, вывод программы сохраняется в файл 'output.txt', который будет создан или обновлен в каждой итерации цикла.

Обратите внимание, что в данном примере программа будет читать вывод в режиме реального времени только на каждой итерации цикла, поэтому в зависимости от частоты вывода внешней программы, вы можете увеличить или уменьшить задержку в функции 'time.sleep()'.

Также обратите внимание, что этот метод не является полностью оптимальным для обработки огромного объема данных на быстрой скорости, но в большинстве случаев он должен быть достаточно эффективным для вашей цели.
как вариант написать запуск консольной команды из Python и получать результаты 
вот когда-то пробовал:
Похожие вопросы