Skip to content

replace-stdout-stderr (UP022)#

Derived from the pyupgrade linter.

Fix is sometimes available.

What it does#

Checks for uses of subprocess.run that send stdout and stderr to a pipe.

Why is this bad?#

As of Python 3.7, subprocess.run has a capture_output keyword argument that can be set to True to capture stdout and stderr outputs. This is equivalent to setting stdout and stderr to subprocess.PIPE, but is more explicit and readable.

Example#

import subprocess

subprocess.run(["foo"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

Use instead:

import subprocess

subprocess.run(["foo"], capture_output=True)

References#