Как использовать Python argparse для ленивой загрузки подкомандPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как использовать Python argparse для ленивой загрузки подкоманд

Сообщение Anonymous »

У меня есть пакет Python с множеством подкоманд и подкоманд. Он организован примерно так:
main.py

Код: Выделить всё

import argparse

from sum import prepare_arg_parser as prepare_sum_parser
from sub import prepare_arg_parser as prepare_sub_parser

parser = argparse.ArgumentParser()
sub_parsers = parser.add_subparsers(dest="command", required=True)

prepare_sum_parser(sub_parsers.add_parser("sum"))
prepare_sub_parser(sub_parsers.add_parser("sub"))

args = parser.parse_args()
args.func(args)
sum.py

Код: Выделить всё

import argparse

def prepare_arg_parser(parser):
parser.set_defaults(func=do_sum)
parser.add_argument("a", type=int)
parser.add_argument("b", type=int)

def do_sum(args):
print(f"{args.a} + {args.b} = {args.a + args.b}")
и так далее.
Однако по мере роста списка модулей время запуска также загружается.
Я хотел бы лениво загружать каждую подкоманду, чтобы загружалось только то, что необходимо для выбранной команды.
Я пробовал что-то вроде этого:

Код: Выделить всё

import argparse

def do_sum(args):
from sum import prepare_arg_parser
parser = argparse.ArgumentParser()
prepare_arg_parser(parser)
sum_args = parser.parse_args(args)
sum_args.func(sum_args)

parser = argparse.ArgumentParser()
sub_parsers = parser.add_subparsers(dest="command", required=True)

sub_parsers.add_parser("sum").set_defaults(func=do_sum)

args, rest = parser.parse_known_args()
args.func(rest)
Но тогда тексты справки и ошибок неверны.
Другой способ — разделить каждую подкоманду на модуль «prepare argparse», который знал бы все аргументы, но, например, лениво вызывал бы функцию do_sum, но мне это не нравится, поскольку она отделяет объявление аргументов от их использования. Кроме того, он по-прежнему будет загружать много ненужных файлов.
Есть ли лениво загружаемые подкоманды?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ubcommands
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как использовать Python argparse для ленивой загрузки подкоманд
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Подкласс Python str с ленивой оценкой его значения (для argparse)
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • (Discord.py) Добавление подкоманд к родительской команде
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Невозможно получить URL-адреса изображений из источника ленивой загрузки страницы.
    Гость » » в форуме Python
    0 Ответы
    16 Просмотры
    Последнее сообщение Гость
  • Как правильно установить начальный размер страницы при внедрении ленивой загрузки ListView в Flutter?
    Гость » » в форуме Android
    0 Ответы
    10 Просмотры
    Последнее сообщение Гость

Вернуться в «Python»