Tecnología · GUÍA PRÁCTICA
¿Python da E2BIG con una carga grande? Verifica la entrada antes de dividir
Linux limita cada argumento además del espacio total. Mueve datos solo por una vía que admita el receptor y comprueba que llegaron los mismos bytes.

Un OSError con errno E2BIG puede aparecer aunque una carga sea menor que el ARG_MAX anunciado. Antes de dividir órdenes o elevar límites, identifica el inicio fallido y si lleva muchos elementos independientes o una entrada indivisible.
Demostrar el fallo de inicio, no solo mirar la ruta
Conserva ejecutable exacto, versión de Python, plataforma y límites de argumentos. Registra errno numérico, longitudes en bytes y tamaño agregado del entorno sin volcar las cargas. Compara una entrada sintética pequeña con el mismo ejecutable y contexto.
Python distingue OSError durante el inicio de un hijo que arranca y devuelve estado distinto de cero. E2BIG tiene causas agregadas y otras documentadas; la ruta que aparece no constituye por sí sola un diagnóstico. No repitas un flujo entero de varios pasos solo porque falló ese inicio.
Separar una carga de una lista de trabajos
El manual Linux describe un límite por cadena de 32 páginas además de los límites combinados de argumentos y entorno; cuenta el NUL final. Importan página y plataforma. Una lista de argumentos evita análisis del shell, pero un elemento demasiado grande todavía falla.
Mover el mismo valor a una variable de entorno no es una salida general. Elevar el límite agregado tampoco elimina el individual. Divide solo trabajos independientes cuyo significado conjunto no cambie; partir un documento JSON o una transacción puede alterar la operación.
Usar una vía admitida y comprobar datos idénticos
Para un receptor que documente stdin, una llamada acotada puede usar subprocess.run([executable, ...], input=payload_bytes, capture_output=True, check=True). No vuelvas a insertar datos grandes en un argumento -c generado. Archivo o archivo de respuesta solo sirven si esa herramienta admite formato y duración correspondientes.
Probamos el mismo receptor Python propio en Linux 6.18.44 con Python 3.12.14. Los 196.608 bytes sintéticos produjeron 262.144 bytes Base64. Como argumento único dieron errno 7 pese a ARG_MAX de 2.097.152. Por stdin devolvió cero y decodificó los 196.608 bytes originales con SHA-256 idéntico. Es un control de transporte, no una prueba de SDK ni multiplataforma.
Separar éxito de transporte y de aplicación
El receptor de demostración implementó ambas vías y usó base64.b64decode(..., validate=True). No demuestra que cualquier CLI acepte JSON por tubería, bytes crudos o un archivo de respuesta. Comprueba codificación, delimitadores, encuadre y contrato real del receptor antes de cambiar.
Conserva errores y compara recuentos de bytes o hashes cuando corresponda; después verifica el resultado de aplicación por separado. El ejemplo acotado almacena salida en memoria; flujos grandes requieren archivos o diseño de streaming. Los fallos tras arrancar son otra revisión. Conserva pasos exitosos previos para evitar duplicarlos al reintentar.
