«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как транслировать выходные данные процесса в реальном времени в Python?

Как транслировать выходные данные процесса в реальном времени в Python?

Опубликовано 17 ноября 2024 г.
Просматривать:101

How to Stream Process Output in Real-Time in Python?

Непрерывное отображение вывода во время выполнения процесса

В сценариях Python мы часто используем подпроцессы для выполнения внешних программ. Хотя это мощная возможность, может быть неприятно ждать завершения процесса, прежде чем получить его выходные данные. Чтобы решить эту проблему, давайте рассмотрим метод непрерывной потоковой передачи вывода процесса во время его работы.

Традиционно мы используем subprocess.communicate() для захвата всего вывода процесса после его завершения. Однако этот подход требует полного завершения процесса, прежде чем можно будет отобразить какой-либо вывод.

Чтобы включить непрерывный вывод, мы можем использовать функцию iter в сочетании с fd.readline(). Это позволяет нам перебирать поток stdout процесса, захватывая строки по мере их появления:

import subprocess

def execute(cmd):
    popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, universal_newlines=True)
    for stdout_line in iter(popen.stdout.readline, ""):
        yield stdout_line 
    popen.stdout.close()
    return_code = popen.wait()
    if return_code:
        raise subprocess.CalledProcessError(return_code, cmd)

В этой расширенной версии мы выдаем каждую строку стандартного вывода по мере ее появления. Это позволяет сценарию непрерывно отображать выходные данные по мере их генерации процессом.

Вот наглядный пример:

for path in execute(["locate", "a"]):
    print(path, end="")

Используя этот подход, мы можем постоянно отображать пути, соответствующие поисковому запросу "a", когда они найдены командой "locate", обеспечивая обратную связь в режиме реального времени. ход процесса.

Этот метод позволяет осуществлять непрерывный мониторинг результатов, повышая интерактивность и удобство использования сценариев, запускающих внешние процессы.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3