How to read subprocess stdout line by line in Python?

Sometimes, we want to read subprocess stdout line by line in Python?

In this article, we’ll look at how to read subprocess stdout line by line in Python?

How to read subprocess stdout line by line in Python?

To read subprocess stdout line by line in Python, we can call stdout.readline on the returned process object.

For instance, we write:

import subprocess

proc = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE)
while True:
    line = proc.stdout.readline()
    if not line:
        break
    print(line.rstrip())

We call subprocess.Popen with a list of strings with the command and command line arguments.

Then we set stdout to subprocess.PIPE to return the output.

Next, we call proc.stdout.readline to return the next line of the stdout output in the while loop.

If line is None, then we stop the loop.

Otherwise, we print the line.

Therefore, we get text like:

b'total 64'
b'-rw-r--r-- 1 runner runner   183 Oct 20 01:10 main.py'
b'-rw-r--r-- 1 runner runner 14924 Oct 19 23:40 poetry.lock'
b'drwxr-xr-x 1 runner runner   126 Oct 19 23:17 __pycache__'
b'-rw-r--r-- 1 runner runner   319 Oct 19 23:39 pyproject.toml'
b'-rw-r--r-- 1 runner runner 12543 Oct 20 00:16 somepic.png'
b'-rw-r--r-- 1 runner runner   197 Oct 19 23:21 strings.json'
b'-rw------- 1 runner runner 18453 Oct 20 00:16 test1.png'

on the screen.

Conclusion

To read subprocess stdout line by line in Python, we can call stdout.readline on the returned process object.