summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/base_subprocess.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-02-01 21:49:59 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-02-01 21:49:59 (GMT)
commit915bcb01110c7db65f8be9139bf887c749fbde75 (patch)
treefa24b947b19c1479ed581dc817c2e696386f3fb0 /Lib/asyncio/base_subprocess.py
parent153d97b24e7253f344860094eb2c98ed93657720 (diff)
downloadcpython-915bcb01110c7db65f8be9139bf887c749fbde75.zip
cpython-915bcb01110c7db65f8be9139bf887c749fbde75.tar.gz
cpython-915bcb01110c7db65f8be9139bf887c749fbde75.tar.bz2
Issue #20400: Merge Tulip into Python: add the new asyncio.subprocess module
* Add a new asyncio.subprocess module * Add new create_subprocess_exec() and create_subprocess_shell() functions * The new asyncio.subprocess.SubprocessStreamProtocol creates stream readers for stdout and stderr and a stream writer for stdin. * The new asyncio.subprocess.Process class offers an API close to the subprocess.Popen class: - pid, returncode, stdin, stdout and stderr attributes - communicate(), wait(), send_signal(), terminate() and kill() methods * Remove STDIN (0), STDOUT (1) and STDERR (2) constants from base_subprocess and unix_events, to not be confused with the symbols with the same name of subprocess and asyncio.subprocess modules * _ProactorBasePipeTransport.get_write_buffer_size() now counts also the size of the pending write * _ProactorBaseWritePipeTransport._loop_writing() may now pause the protocol if the write buffer size is greater than the high water mark (64 KB by default)
Diffstat (limited to 'Lib/asyncio/base_subprocess.py')
-rw-r--r--Lib/asyncio/base_subprocess.py23
1 files changed, 9 insertions, 14 deletions
diff --git a/Lib/asyncio/base_subprocess.py b/Lib/asyncio/base_subprocess.py
index b7cdbce..b78f816 100644
--- a/Lib/asyncio/base_subprocess.py
+++ b/Lib/asyncio/base_subprocess.py
@@ -6,11 +6,6 @@ from . import tasks
from . import transports
-STDIN = 0
-STDOUT = 1
-STDERR = 2
-
-
class BaseSubprocessTransport(transports.SubprocessTransport):
def __init__(self, loop, protocol, args, shell,
@@ -22,11 +17,11 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
self._pipes = {}
if stdin == subprocess.PIPE:
- self._pipes[STDIN] = None
+ self._pipes[0] = None
if stdout == subprocess.PIPE:
- self._pipes[STDOUT] = None
+ self._pipes[1] = None
if stderr == subprocess.PIPE:
- self._pipes[STDERR] = None
+ self._pipes[2] = None
self._pending_calls = collections.deque()
self._finished = False
self._returncode = None
@@ -76,19 +71,19 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
loop = self._loop
if proc.stdin is not None:
_, pipe = yield from loop.connect_write_pipe(
- lambda: WriteSubprocessPipeProto(self, STDIN),
+ lambda: WriteSubprocessPipeProto(self, 0),
proc.stdin)
- self._pipes[STDIN] = pipe
+ self._pipes[0] = pipe
if proc.stdout is not None:
_, pipe = yield from loop.connect_read_pipe(
- lambda: ReadSubprocessPipeProto(self, STDOUT),
+ lambda: ReadSubprocessPipeProto(self, 1),
proc.stdout)
- self._pipes[STDOUT] = pipe
+ self._pipes[1] = pipe
if proc.stderr is not None:
_, pipe = yield from loop.connect_read_pipe(
- lambda: ReadSubprocessPipeProto(self, STDERR),
+ lambda: ReadSubprocessPipeProto(self, 2),
proc.stderr)
- self._pipes[STDERR] = pipe
+ self._pipes[2] = pipe
assert self._pending_calls is not None