Вы можете группировать список файлов следующим образом:
def batch_args(args, arg_max):
current_arg_length = 0
current_list = []
for arg in args:
if current_arg_length + len(arg) + 1 > arg_max:
yield current_list
current_list = [arg]
current_arg_length = len(arg)
else:
current_list.append(arg)
current_arg_length += len(arg) + 1
if current_list:
yield current_list
Таким образом, тело метода будет выглядеть так:
os_limit = 10
for args in batch_args(files, os_limit):
command = [third_party_path, "-z"]
command.extend(args)
output = subprocess.check_output(command)
if "sought" in decode(output):
return False
return True
В двух вещах, в которых я не уверен:
- Считается ли путь к самому exe-файлу к пределу? Если да -> добавить это к пределу каждой партии. (Или уменьшите arg_max на длину строки exe)
- Считается ли расстояние между аргументами? Если нет, удалите оба +1 случая.
Настройте arg_max на то, что возможно. Вероятно, есть какой-то способ выяснить это для каждой ОС. Здесь - это некоторая информация о максимальном размере аргументов некоторых ОС. На этом сайте также говорится, что для Windows существует ограничение в 32 КБ.
Может быть, есть лучший способ сделать это с помощью библиотеки подпроцессов, но я не уверен.
Также я не занимаюсь обработкой исключений (аргументы в списке длиннее максимального размера и т. Д.)