Skip to content

Commit

Permalink
pythongh-97825: fix AttributeError when calling subprocess.check_outp…
Browse files Browse the repository at this point in the history
…ut(input=None) with encoding or errors args (python#97826)

* fix AttributeError, add unit test
  • Loading branch information
akulakov authored and mpage committed Oct 11, 2022
1 parent 83e1296 commit 2efca9c
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Lib/subprocess.py
Original file line number Diff line number Diff line change
Expand Up @@ -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''
Expand Down
6 changes: 6 additions & 0 deletions Lib/test/test_subprocess.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,12 @@ def test_check_output_input_none_universal_newlines(self):
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:
Expand Down
Original file line number Diff line number Diff line change
@@ -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.

0 comments on commit 2efca9c

Please sign in to comment.