Python Glossary English

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

asyncio.create_subprocess_exec()

подпроцессы

Запускает программу как дочерний процесс, не блокируя цикл событий; аргументы передаются списком, без оболочки.

Синтаксис

proc = await asyncio.create_subprocess_exec(program, *args, stdin=None, stdout=None, stderr=None, **kwds)

Аргументы идут отдельными параметрами: create_subprocess_exec('ls', '-l'), а не строкой 'ls -l'. С stdout=PIPE читайте вывод через await proc.communicate(): если вызвать только proc.wait(), а ребёнок заполнит буфер канала, оба зависнут навсегда. Для текущего интерпретатора берут sys.executable, а не строку 'python'. На Windows нужен ProactorEventLoop — он стоит по умолчанию с 3.8.

Примеры

import asyncio
import sys
async def main():
    proc = await asyncio.create_subprocess_exec(
        sys.executable, '-c', 'print(6 * 7)',
        stdout=asyncio.subprocess.PIPE,
    )
    out, _ = await proc.communicate()  # не wait(): тот зависнет на полном канале
    print(out.decode().strip(), proc.returncode)  # → 42 0
asyncio.run(main())

См. также

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