Python 'sys.argv' é limitado no número máximo de argumentos?

Eu tenho um script Python que precisa processar um grande número de arquivos. Para contornar o limite relativamente pequeno do Linux no número de argumentos que podem ser passados para um comando, estou usandofind -print0 comxargs -0.

Eu sei que outra opção seria usar o módulo glob do Python, mas isso não ajudará quando eu tiver umfind comando, procurando horários de modificação et

Ao executar meu script em um grande número de arquivos, o Python aceita apenas um subconjunto dos argumentos, uma limitação que eu pensava inicialmente estar emargparse, mas parece estar emsys.argv. Não consigo encontrar nenhuma documentação sobre isso. É um bug?

Aqui está um exemplo de script Python que ilustra o ponto:

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)

Tenho muitos arquivos para executar isso em:

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

Mas parece xargs ou o Python está dividindo minha grande lista de arquivos e processando-a com várias execuções diferentes do 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 que vários processos estão sendo criados para processar a lista? Por que está sendo fragmentado? Acho que não há novas linhas nos nomes dos arquivos e não deveria-print0 e-0 cuida dessa questão? Se houvesse novas linhas, eu esperariased -n '1810,1830p' filelist para mostrar alguma estranheza no exemplo acima. O que da

Eu quase esqueci

$ python -V
Python 2.7.2+

questionAnswers(8)

yourAnswerToTheQuestion