Está Python 'sys.argv' limitado en el número máximo de argumentos?

Tengo un script de Python que necesita procesar una gran cantidad de archivos. Para evitar el límite relativamente pequeño de Linux en la cantidad de argumentos que se pueden pasar a un comando, estoy usandofind -print0 conxargs -0.

Sé que otra opción sería usar el módulo global de Python, pero eso no ayudará cuando tenga un @ más avanzafind comando, buscando tiempos de modificación, etc.

Cuando ejecuto mi script en una gran cantidad de archivos, Python solo acepta un subconjunto de argumentos, una limitación que pensé primero que estaba enargparse, pero parece estar ensys.argv. No puedo encontrar ninguna documentación sobre esto. ¿Es un error

Aquí hay un script de Python de muestra que ilustra el punto:

import argparse
import sys
import os

parser = argparse.ArgumentParser()
parser.add_argument('input_files', nargs='+')
args = parser.parse_args(sys.argv[1:])

print 'pid:', os.getpid(), 'argv files', len(sys.argv[1:]), 'argparse files:', len(args.input_files)

Tengo muchos archivos para ejecutar esto:

$ find ~/ -name "*" -print0 | xargs -0 ls > filelist
748709 filelist

Pero parece xargs o Python está fragmentando mi gran lista de archivos y procesándola con varias ejecuciones diferentes de Python:

$ find ~/ -name "*" -print0 | xargs -0 python test.py
pid: 4216 argv files 1819 number of files: 1819
pid: 4217 argv files 1845 number of files: 1845
pid: 4218 argv files 1845 number of files: 1845
pid: 4219 argv files 1845 number of files: 1845
pid: 4220 argv files 1845 number of files: 1845
pid: 4221 argv files 1845 number of files: 1845
...

¿Por qué se crean múltiples procesos para procesar la lista? ¿Por qué está siendo fragmentado? No creo que haya nuevas líneas en los nombres de archivo y no debería-print0 y-0 cuidar de ese problema? Si hubiera nuevas líneas, esperaríased -n '1810,1830p' filelist para mostrar algo extraño para el ejemplo anterior. ¿Lo que da

Casi lo olvido

$ python -V
Python 2.7.2+

Respuestas a la pregunta(8)

Su respuesta a la pregunta