diff options
author | 依云 <lilydjwg@gmail.com> | 2019-05-29 06:50:59 (GMT) |
---|---|---|
committer | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2019-05-29 06:50:59 (GMT) |
commit | 744c08a9c75a1a53b7a6521fcee3e7c513919ff9 (patch) | |
tree | 432a13057b4f1031536f30a06ca6618f85d102b4 | |
parent | e1f95e77e0647aff602e0660ba3c282b71045875 (diff) | |
download | cpython-744c08a9c75a1a53b7a6521fcee3e7c513919ff9.zip cpython-744c08a9c75a1a53b7a6521fcee3e7c513919ff9.tar.gz cpython-744c08a9c75a1a53b7a6521fcee3e7c513919ff9.tar.bz2 |
bpo-35246: fix support for path-like args in asyncio subprocess (GH-13628)
Drop isinstance checks from create_subprocess_exec function and let
subprocess module do them.
https://bugs.python.org/issue35246
https://bugs.python.org/issue35246
-rw-r--r-- | Lib/asyncio/base_events.py | 5 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_subprocess.py | 11 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-05-28-23-17-35.bpo-35246.oXT21d.rst | 1 |
3 files changed, 12 insertions, 5 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index 68105ee..e002539 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -1605,11 +1605,6 @@ class BaseEventLoop(events.AbstractEventLoop): raise ValueError("errors must be None") popen_args = (program,) + args - for arg in popen_args: - if not isinstance(arg, (str, bytes)): - raise TypeError( - f"program arguments must be a bytes or text string, " - f"not {type(arg).__name__}") protocol = protocol_factory() debug_log = None if self._debug: diff --git a/Lib/test/test_asyncio/test_subprocess.py b/Lib/test/test_asyncio/test_subprocess.py index f1ab039..7d72e6c 100644 --- a/Lib/test/test_asyncio/test_subprocess.py +++ b/Lib/test/test_asyncio/test_subprocess.py @@ -622,6 +622,17 @@ class SubprocessMixin: self.loop.run_until_complete(execute()) + def test_create_subprocess_exec_with_path(self): + async def execute(): + p = await subprocess.create_subprocess_exec( + support.FakePath(sys.executable), '-c', 'pass') + await p.wait() + p = await subprocess.create_subprocess_exec( + sys.executable, '-c', 'pass', support.FakePath('.')) + await p.wait() + + self.assertIsNone(self.loop.run_until_complete(execute())) + if sys.platform != 'win32': # Unix class SubprocessWatcherMixin(SubprocessMixin): diff --git a/Misc/NEWS.d/next/Library/2019-05-28-23-17-35.bpo-35246.oXT21d.rst b/Misc/NEWS.d/next/Library/2019-05-28-23-17-35.bpo-35246.oXT21d.rst new file mode 100644 index 0000000..39d4469 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-05-28-23-17-35.bpo-35246.oXT21d.rst @@ -0,0 +1 @@ +Make :func:`asyncio.create_subprocess_exec` accept path-like arguments. |