Home >Backend Development >Python Tutorial >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!