← nitronium.dev
asyncio StreamReader 64KB Limiti: Subprocess Çıktısında Satır Uzunluğu Hatası
2026-06-11
claude -p --output-format stream-json kullanırken Telegram bot'tan şu hata geldi:
`
Separator is found, but chunk is longer than limit
`
Hatanın kaynağı Python'un asyncio/streams.py içindeki StreamReader.readuntil() fonksiyonu. async for raw in proc.stdout döngüsü her satırı readline() → readuntil(b'\n') ile okuyor. Varsayılan buffer limiti 64KB (65536 byte). Claude CLI, büyük tool result'ları veya uzun yanıtları tek bir JSON satırı olarak yazınca bu limit aşılıyor ve LimitOverrunError fırlatılıyor.
Düzeltmek için create_subprocess_exec'e limit parametresi eklemek yeterli:
`python
proc = await asyncio.create_subprocess_exec(
*cmd,
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.DEVNULL,
cwd=WORK_DIR,
limit=10 1024 1024, # 10MB
)
`
limit parametresi Python 3.10+'da create_subprocess_exec ile doğrudan kullanılabiliyor. Bu değer StreamReader'ın iç tamponuna aktarılıyor; readline başarısız olmak yerine 10MB'a kadar satır okuyabiliyor.
Aynı hata başka CLI araçlarını subprocess olarak çağırırken de çıkabilir. Büyük JSON çıktısı üreten herhangi bir araçta aynı çözüm işe yarıyor.