Модуль argparse - Как изменить формат справки во время выполнения? - PullRequest
2 голосов
/ 08 июля 2011

Допустим, у меня есть парсер:

self.__parser = argparse.ArgumentParser(
                            prog = '<...>',
                            fromfile_prefix_chars='@')

После его инициализации я хочу во время выполнения изменить переменную prog в argparser на что-то другое, скажем: 'aaa'.

Код:

self.__parser.prog = 'aaa'

НЕ работает, потому что argparser кэширует эту прогу где-то внутри форматировщиков ts.Кто-нибудь знает, возможно ли просто изменить это свойство?

1 Ответ

3 голосов
/ 08 июля 2011

Я подозреваю, что проблема где-то еще в вашем коде, так как приведенный ниже код позволяет изменять атрибут prog, что демонстрируется вызовами print_help:

import argparse
import sys

class MyParser():
    def __init__(self, nm=sys.argv[0]):
        self.__parser = argparse.ArgumentParser(prog=nm, fromfile_prefix_chars='@')
    def change_prog_name(self, nm):
        self.__parser.prog = nm
    def print_help(self):
        self.__parser.print_help()

my_parser = MyParser()
my_parser.print_help()
print 'after prog change:'
my_parser.change_prog_name('aaa')
my_parser.print_help()

Выход:

использование: argparse_test.py [-h]

необязательные аргументы:
-h, --help показать это справочное сообщение и выйти

после смены прог:
использование: aaa [-h]

необязательные аргументы:
-h, --help показать это справочное сообщение и выйти

...