summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio/base_events.py
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2014-02-11 10:44:56 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2014-02-11 10:44:56 (GMT)
commit4e8d2f25e23d1da33d414074485da8e374d98495 (patch)
treeaabc74c6228c42b26446857ce1db78028e6e4d32 /Lib/asyncio/base_events.py
parenta125497ea302aff937a5c59f98c39dba4f1ab59b (diff)
downloadcpython-4e8d2f25e23d1da33d414074485da8e374d98495.zip
cpython-4e8d2f25e23d1da33d414074485da8e374d98495.tar.gz
cpython-4e8d2f25e23d1da33d414074485da8e374d98495.tar.bz2
asyncio, Tulip issue 130: Add more checks on subprocess_exec/subprocess_shell
parameters
Diffstat (limited to 'Lib/asyncio/base_events.py')
-rw-r--r--Lib/asyncio/base_events.py12
1 files changed, 9 insertions, 3 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 4b7b161..5765f47 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -558,7 +558,7 @@ class BaseEventLoop(events.AbstractEventLoop):
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=False, shell=True, bufsize=0,
**kwargs):
- if not isinstance(cmd, str):
+ if not isinstance(cmd, (bytes, str)):
raise ValueError("cmd must be a string")
if universal_newlines:
raise ValueError("universal_newlines must be False")
@@ -572,7 +572,7 @@ class BaseEventLoop(events.AbstractEventLoop):
return transport, protocol
@tasks.coroutine
- def subprocess_exec(self, protocol_factory, *args, stdin=subprocess.PIPE,
+ def subprocess_exec(self, protocol_factory, program, *args, stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
universal_newlines=False, shell=False, bufsize=0,
**kwargs):
@@ -582,9 +582,15 @@ class BaseEventLoop(events.AbstractEventLoop):
raise ValueError("shell must be False")
if bufsize != 0:
raise ValueError("bufsize must be 0")
+ popen_args = (program,) + args
+ for arg in popen_args:
+ if not isinstance(arg, (str, bytes)):
+ raise TypeError("program arguments must be "
+ "a bytes or text string, not %s"
+ % type(arg).__name__)
protocol = protocol_factory()
transport = yield from self._make_subprocess_transport(
- protocol, args, False, stdin, stdout, stderr, bufsize, **kwargs)
+ protocol, popen_args, False, stdin, stdout, stderr, bufsize, **kwargs)
return transport, protocol
def _add_callback(self, handle):