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Сообщить о неточности