diff options
author | Rémi Lapeyre <remi.lapeyre@lenstra.fr> | 2021-09-20 15:09:05 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-20 15:09:05 (GMT) |
commit | 4d2957c1b9a915f76da418e89bf9b5add141ca3e (patch) | |
tree | c69d8a5b4c23e4800f877945f727a5786cb50717 | |
parent | ef9e22b253253615098d22cb49141a2a1024ee3c (diff) | |
download | cpython-4d2957c1b9a915f76da418e89bf9b5add141ca3e.zip cpython-4d2957c1b9a915f76da418e89bf9b5add141ca3e.tar.gz cpython-4d2957c1b9a915f76da418e89bf9b5add141ca3e.tar.bz2 |
bpo-40497: Fix handling of check in subprocess.check_output() (GH-19897)
Co-authored-by: Tal Einat <taleinat@gmail.com>
Co-authored-by: Łukasz Langa <lukasz@langa.pl>
-rw-r--r-- | Lib/subprocess.py | 5 | ||||
-rw-r--r-- | Lib/test/test_subprocess.py | 8 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2020-10-18-09-42-53.bpo-40497.CRz2sG.rst | 4 |
3 files changed, 15 insertions, 2 deletions
diff --git a/Lib/subprocess.py b/Lib/subprocess.py index dd1174e..33f022f 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 87967ca..3af523e 100644 --- a/Lib/test/test_subprocess.py +++ b/Lib/test/test_subprocess.py @@ -171,6 +171,14 @@ class ProcessTestCase(BaseTestCase): [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 0000000..067c486 --- /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. |