Home  >  Article  >  Backend Development  >  How to Stream Process Output in Real-Time in Python?

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

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 04:15:29558browse

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

Continuous Output Display during Process Execution

In Python scripts, we often utilize subprocesses to execute external programs. While this is a powerful capability, it can be frustrating to wait for a process to complete before retrieving its output. To address this, let's explore a method to continuously stream the process output while it's running.

Traditionally, we use subprocess.communicate() to capture the entire output of a process once it's finished. However, this approach requires the process to complete entirely before any output can be displayed.

To enable continuous output, we can leverage the iter function in conjunction with fd.readline(). This allows us to iterate over the stdout stream of the process, capturing lines as they become available:

<code class="python">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)</code>

In this enhanced version, we yield each line of stdout as it becomes available. This allows the script to display the output continuously as it's generated by the process.

Here's an illustrative example:

<code class="python">for path in execute(["locate", "a"]):
    print(path, end="")</code>

Using this approach, we can continuously display the paths matching the search query "a" as they're found by the "locate" command, providing real-time feedback on the progress of the process.

This technique allows for continuous output monitoring, enhancing the interactivity and user experience of scripts that launch external processes.

The above is the detailed content of How to Stream Process Output in Real-Time in Python?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn