Skip to content

subprocess-run-without-check (PLW1510)

Derived from the Pylint linter.

Fix is always available.

What it does

Checks for uses of subprocess.run without an explicit check argument.

Why is this bad?

By default, subprocess.run does not check the return code of the process it runs. This can lead to silent failures.

Instead, consider using check=True to raise an exception if the process fails, or set check=False explicitly to mark the behavior as intentional.

Example

import subprocess

subprocess.run(["ls", "nonexistent"])  # No exception raised.

Use instead:

import subprocess

subprocess.run(["ls", "nonexistent"], check=True)  # Raises exception.

Or:

import subprocess

subprocess.run(["ls", "nonexistent"], check=False)  # Explicitly no check.

Fix safety

This rule's fix is marked as unsafe for function calls that contain **kwargs, as adding a check keyword argument to such a call may lead to a duplicate keyword argument error.

References