2

Lets say, I've got a parser:

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

After it is initialized I want in runtime to change the prog variable in argparser to something else, lets say: 'aaa'.

Code:

self.__parser.prog = 'aaa'

does NOT work, because argparser caches this prog somwhere inside ts formatters. Does somebody knows if is it possible to change this property in simple way?

Pytor
  • 21
  • 1

1 Answers1

3

It is my suspicion that the problem is somewhere else in your code, as the code below is allowed to change the prog attribute, demonstrated by the calls to 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()

Output:

usage: argparse_test.py [-h]

optional arguments:
   -h, --help show this help message and exit

after prog change:
usage: aaa [-h]

optional arguments:
   -h, --help show this help message and exit

Community
  • 1
  • 1
GreenMatt
  • 18,244
  • 7
  • 53
  • 79