Skip to content

subprocess.run keeps waiting after the process termination #97000

Open
@piwicode

Description

@piwicode

subprocess.run keeps waiting after the process termination.
This happens when stdout or stderr is redirected, and the started process pass that stream to a background process.

Reproduce with:

import subprocess
subprocess.run(["/bin/bash", "-c", "sleep 5&"], stdout=subprocess.PIPE, timeout=1)

Result:
subprocess.TimeoutExpired: Command '['/bin/bash', '-c', 'sleep 5&']' timed out after 1 seconds
This is not correct as the subprocess has terminated and produces a return code.
The expected behavior for run is to return as soon as the instanciated terminates, regardless of the streams lifecycles.

Variants:
Calling subprocess.run(["/bin/bash", "-c", "sleep 5&"], timeout=1) works as expected, that is to say run returns immediately.

Environment:

Python 3.8.9:

  • CPython versions tested on:
  • Operating system MacOs, Linux

Metadata

Metadata

Assignees

Labels

stdlibPython modules in the Lib dirtopic-subprocessSubprocess issues.type-bugAn unexpected behavior, bug, or error

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions