Issue 32102: Add "capture_output=True" option to subprocess.run (original) (raw)

I'm hesitant to suggest adding yet-another-option to any subprocess API, but I'm thinking it may be worth it in this case.

The idea is to make it possible to replace:

result = subprocess.run(cmd, stdout=PIPE, stderr=PIPE)

with:

result = subprocess.run(cmd, capture_output=True)

That way, it would be possible for the raw stdin/stdout/stderr parameters to be treated as low level implementation details most of the time, since the most common configurations would be:

# Use parent's stdin/stdout/stderr
result = subprocess.run(cmd) 
# Use pipe for stdin, use parent's stdout/stderr
result = subprocess.run(cmd, input=data)
# Use parent's stdin, use pipe for stdout/stderr
result = subprocess.run(cmd, capture_output=True) 
# Use pipe for stdin/stdout/stderr
result = subprocess.run(cmd, input=data, capture_output=True)

Yeah, I find it pretty common to set both stdout and stderr to PIPE, but I'm with you in hesitating to add YAO to the subprocess API. If you do move forward with this though, I think capture_output would have to be mutually exclusive to stdout and stderr. You should not be allowed to provide either of the latter two if the former is given.