Python Glossary English

Python 3.4+Асинхронное программированиефункция

asyncio.create_subprocess_shell()

подпроцессы

Запускает команду через оболочку (sh на Unix, cmd.exe на Windows), не блокируя цикл событий; команда передаётся одной строкой.

Синтаксис

proc = await asyncio.create_subprocess_shell(cmd, stdin=None, stdout=None, stderr=None, **kwds)

Оболочка разбирает строку целиком, поэтому подставлять в неё ввод пользователя без shlex.quote() — прямая дорога к внедрению команд. Возвращаемый Process — это процесс оболочки: proc.pid и proc.kill() относятся к sh, а не к запущенной программе, и её дети могут пережить kill(). Если оболочка не нужна (каналы, *, &&), берите create_subprocess_exec.

Примеры

import asyncio
import shlex
async def main():
    name = "мир; rm -rf /"  # чужой ввод
    proc = await asyncio.create_subprocess_shell(
        'echo ' + shlex.quote(name),
        stdout=asyncio.subprocess.PIPE,
    )
    out, _ = await proc.communicate()
    print(out.decode().strip())  # → мир; rm -rf /
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности