summaryrefslogtreecommitdiff
path: root/examples/subprocess_attach_read_pipe.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/subprocess_attach_read_pipe.py')
-rw-r--r--examples/subprocess_attach_read_pipe.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/examples/subprocess_attach_read_pipe.py b/examples/subprocess_attach_read_pipe.py
new file mode 100644
index 0000000..8bec652
--- /dev/null
+++ b/examples/subprocess_attach_read_pipe.py
@@ -0,0 +1,33 @@
+#!/usr/bin/env python3
+"""Example showing how to attach a read pipe to a subprocess."""
+import asyncio
+import os, sys
+from asyncio import subprocess
+
+code = """
+import os, sys
+fd = int(sys.argv[1])
+data = os.write(fd, b'data')
+os.close(fd)
+"""
+
+loop = asyncio.get_event_loop()
+
+@asyncio.coroutine
+def task():
+ rfd, wfd = os.pipe()
+ args = [sys.executable, '-c', code, str(wfd)]
+
+ pipe = open(rfd, 'rb', 0)
+ reader = asyncio.StreamReader(loop=loop)
+ protocol = asyncio.StreamReaderProtocol(reader, loop=loop)
+ transport, _ = yield from loop.connect_read_pipe(lambda: protocol, pipe)
+
+ proc = yield from asyncio.create_subprocess_exec(*args, pass_fds={wfd})
+ yield from proc.wait()
+
+ os.close(wfd)
+ data = yield from reader.read()
+ print("read = %r" % data.decode())
+
+loop.run_until_complete(task())