Python 'sys.argv' ограничен в максимальном количестве аргументов?

У меня есть сценарий Python, который должен обрабатывать большое количество файлов. Чтобы обойти относительно небольшой лимит Linux на количество аргументов, которые можно передать команде, я используюfind -print0 с участиемxargs -0.

Я знаю, что другой вариант будет использовать модуль глобуса Python, но это не поможет, когда у меня есть более продвинутыйfind команда, ищет время модификации и т. д.

Когда мой скрипт запускается на большом количестве файлов, Python принимает только подмножество аргументов, ограничение, о котором я сначала подумалargparse, но, кажется, находится вsys.argv, Я не могу найти документацию по этому вопросу. Это ошибка?

Вот пример скрипта Python, иллюстрирующий эту мысль:

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)

У меня есть много файлов для запуска:

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

Но, похоже,xargs или Python разбивает мой большой список файлов и обрабатывает его несколькими различными запусками 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
...

Почему для обработки списка создаются несколько процессов? Почему это вообще кусается? Я не думаю, что есть новые строки в именах файлов и не должны-print0 а также-0 позаботиться об этом? Если бы были новые строки, я бы ожидалsed -n '1810,1830p' filelist показать некоторую странность для приведенного выше примера. Что дает?

Я почти забыл:

$ python -V
Python 2.7.2+

Ответы на вопрос(4)

Ваш ответ на вопрос