Как документация говорит:
Аргумент limit
устанавливает ограничение буфера для StreamReader
оболочек для
Process.stdout
и Process.stderr
(если subprocess.PIPE
передано
Аргументы stdout и stderr).
Кажется, это то, что нам нужно.
Предел по умолчанию кажется 64 КиБ, вы можете попробовать что-нибудь выше:
proc = await asyncio.subprocess.create_subprocess_exec(
command,
limit = 1024 * 128, # 128 KiB
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.STDOUT)
Upd:
Я просто хочу обрезать / игнорировать слишком длинные строки. Это
возможно?
Вы можете подавить ошибки на длинных линиях и продолжить после этого. Следующий код (протестирован на Windows) показывает идею:
import asyncio
async def main():
proc = await asyncio.subprocess.create_subprocess_exec(
*[
'wget',
'--help'
],
limit = 20,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.STDOUT)
while True:
try:
async for line in proc.stdout:
line = line.decode('utf-8').strip()
print(line)
except ValueError:
continue
else:
break
loop = asyncio.ProactorEventLoop()
asyncio.set_event_loop(loop)
loop.run_until_complete(main())