https://github.com/python/cpython/commit/4abca7e1e7e2764faf20c7e677ea5c9ea9dbffe2
commit: 4abca7e1e7e2764faf20c7e677ea5c9ea9dbffe2
branch: main
author: Paulo Neves <[email protected]>
committer: encukou <[email protected]>
date: 2024-03-26T13:37:50+01:00
summary:

gh-98966: Handle stdout=subprocess.STDOUT (GH-98967)

Explicitly handle the case where stdout=STDOUT
as otherwise the existing error handling gets
confused and reports hard to understand errors.

Signed-off-by: Paulo Neves <[email protected]>

files:
A Misc/NEWS.d/next/Library/2024-03-26-11-48-39.gh-issue-98966.SayV9y.rst
M Lib/subprocess.py
M Lib/test/test_subprocess.py

diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index dbe15277866c99..d7c7b45127104f 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -839,6 +839,9 @@ def __init__(self, args, bufsize=-1, executable=None,
         if not isinstance(bufsize, int):
             raise TypeError("bufsize must be an integer")
 
+        if stdout is STDOUT:
+             raise ValueError("STDOUT can only be used for stderr")
+
         if pipesize is None:
             pipesize = -1  # Restore default
         if not isinstance(pipesize, int):
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 70452ca94a6a8a..9ecd8426cb5537 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -1763,6 +1763,13 @@ def test_capture_output(self):
         self.assertIn(b'BDFL', cp.stdout)
         self.assertIn(b'FLUFL', cp.stderr)
 
+    def test_stdout_stdout(self):
+        # run() refuses to accept stdout=STDOUT
+        with self.assertRaises(ValueError,
+                msg=("STDOUT can only be used for stderr")):
+            self.run_python("print('will not be run')",
+                            stdout=subprocess.STDOUT)
+
     def test_stdout_with_capture_output_arg(self):
         # run() refuses to accept 'stdout' with 'capture_output'
         tf = tempfile.TemporaryFile()
diff --git 
a/Misc/NEWS.d/next/Library/2024-03-26-11-48-39.gh-issue-98966.SayV9y.rst 
b/Misc/NEWS.d/next/Library/2024-03-26-11-48-39.gh-issue-98966.SayV9y.rst
new file mode 100644
index 00000000000000..e819a1e9a0aba0
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-03-26-11-48-39.gh-issue-98966.SayV9y.rst
@@ -0,0 +1,2 @@
+In :mod:`subprocess`, raise a more informative message when
+``stdout=STDOUT``.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to