mirror of https://github.com/python/cpython
gh-97825: fix AttributeError when calling subprocess.check_output(input=None) with encoding or errors args (#97826)
* fix AttributeError, add unit test
This commit is contained in:
parent
0ceafa7fa4
commit
db64fb9bbe
|
@ -456,7 +456,8 @@ def check_output(*popenargs, timeout=None, **kwargs):
|
|||
if 'input' in kwargs and kwargs['input'] is None:
|
||||
# Explicitly passing input=None was previously equivalent to passing an
|
||||
# empty string. That is maintained here for backwards compatibility.
|
||||
if kwargs.get('universal_newlines') or kwargs.get('text'):
|
||||
if kwargs.get('universal_newlines') or kwargs.get('text') or kwargs.get('encoding') \
|
||||
or kwargs.get('errors'):
|
||||
empty = ''
|
||||
else:
|
||||
empty = b''
|
||||
|
|
|
@ -238,6 +238,12 @@ class ProcessTestCase(BaseTestCase):
|
|||
input=None, universal_newlines=True)
|
||||
self.assertNotIn('XX', output)
|
||||
|
||||
def test_check_output_input_none_encoding_errors(self):
|
||||
output = subprocess.check_output(
|
||||
[sys.executable, "-c", "print('foo')"],
|
||||
input=None, encoding='utf-8', errors='ignore')
|
||||
self.assertIn('foo', output)
|
||||
|
||||
def test_check_output_stdout_arg(self):
|
||||
# check_output() refuses to accept 'stdout' argument
|
||||
with self.assertRaises(ValueError) as c:
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Fixes :exc:`AttributeError` when :meth:`subprocess.check_output` is used with argument ``input=None`` and either of the arguments *encoding* or *errors* are used.
|
Loading…
Reference in New Issue