[Python-checkins] bpo-40497: Fix handling of check in subprocess.check_output() (GH-19897)

ambv webhook-mailer at python.org
Mon Sep 20 11:09:15 EDT 2021


https://github.com/python/cpython/commit/4d2957c1b9a915f76da418e89bf9b5add141ca3e
commit: 4d2957c1b9a915f76da418e89bf9b5add141ca3e
branch: main
author: Rémi Lapeyre <remi.lapeyre at lenstra.fr>
committer: ambv <lukasz at langa.pl>
date: 2021-09-20T17:09:05+02:00
summary:

bpo-40497: Fix handling of check in subprocess.check_output() (GH-19897)

Co-authored-by: Tal Einat <taleinat at gmail.com>
Co-authored-by: Łukasz Langa <lukasz at langa.pl>

files:
A Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst
M Lib/subprocess.py
M Lib/test/test_subprocess.py

diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index dd1174ee59ad3..33f022f8fced6 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -405,8 +405,9 @@ def check_output(*popenargs, timeout=None, **kwargs):
     decoded according to locale encoding, or by "encoding" if set. Text mode
     is triggered by setting any of text, encoding, errors or universal_newlines.
     """
-    if 'stdout' in kwargs:
-        raise ValueError('stdout argument not allowed, it will be overridden.')
+    for kw in ('stdout', 'check'):
+        if kw in kwargs:
+            raise ValueError(f'{kw} argument not allowed, it will be overridden.')
 
     if 'input' in kwargs and kwargs['input'] is None:
         # Explicitly passing input=None was previously equivalent to passing an
diff --git a/Lib/test/test_subprocess.py b/Lib/test/test_subprocess.py
index 87967ca7f3c93..3af523e8346c4 100644
--- a/Lib/test/test_subprocess.py
+++ b/Lib/test/test_subprocess.py
@@ -171,6 +171,14 @@ def test_check_output(self):
                 [sys.executable, "-c", "print('BDFL')"])
         self.assertIn(b'BDFL', output)
 
+        with self.assertRaisesRegex(ValueError,
+                "stdout argument not allowed, it will be overridden"):
+            subprocess.check_output([], stdout=None)
+
+        with self.assertRaisesRegex(ValueError,
+                "check argument not allowed, it will be overridden"):
+            subprocess.check_output([], check=False)
+
     def test_check_output_nonzero(self):
         # check_call() function with non-zero return code
         with self.assertRaises(subprocess.CalledProcessError) as c:
diff --git a/Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst b/Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst
new file mode 100644
index 0000000000000..067c48626c308
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst
@@ -0,0 +1,4 @@
+:meth:`subprocess.check_output` now raises :exc:`ValueError` when the
+invalid keyword argument *check* is passed by user code. Previously
+such use would fail later with a :exc:`TypeError`.
+Patch by Rémi Lapeyre.



More information about the Python-checkins mailing list