Commit 7657f6ba authored by Yury Selivanov's avatar Yury Selivanov

Issue #26848: Fix asyncio/subprocess.communicate() to handle empty input.

parent d76c7c2b
...@@ -166,7 +166,7 @@ class Process: ...@@ -166,7 +166,7 @@ class Process:
@coroutine @coroutine
def communicate(self, input=None): def communicate(self, input=None):
if input: if input is not None:
stdin = self._feed_stdin(input) stdin = self._feed_stdin(input)
else: else:
stdin = self._noop() stdin = self._noop()
......
...@@ -287,6 +287,25 @@ class SubprocessMixin: ...@@ -287,6 +287,25 @@ class SubprocessMixin:
self.assertEqual(output.rstrip(), b'3') self.assertEqual(output.rstrip(), b'3')
self.assertEqual(exitcode, 0) self.assertEqual(exitcode, 0)
def test_empty_input(self):
@asyncio.coroutine
def empty_input():
code = 'import sys; data = sys.stdin.read(); print(len(data))'
proc = yield from asyncio.create_subprocess_exec(
sys.executable, '-c', code,
stdin=asyncio.subprocess.PIPE,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE,
close_fds=False,
loop=self.loop)
stdout, stderr = yield from proc.communicate(b'')
exitcode = yield from proc.wait()
return (stdout, exitcode)
output, exitcode = self.loop.run_until_complete(empty_input())
self.assertEqual(output.rstrip(), b'0')
self.assertEqual(exitcode, 0)
def test_cancel_process_wait(self): def test_cancel_process_wait(self):
# Issue #23140: cancel Process.wait() # Issue #23140: cancel Process.wait()
......
...@@ -436,6 +436,9 @@ Library ...@@ -436,6 +436,9 @@ Library
- Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on - Issue #26406: Avoid unnecessary serialization of getaddrinfo(3) calls on
current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis. current versions of OpenBSD and NetBSD. Patch by A. Jesse Jiryu Davis.
- Issue #26848: Fix asyncio/subprocess.communicate() to handle empty input.
Patch by Jack O'Connor.
Documentation Documentation
------------- -------------
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment