Let\'s say I have a script that does some work on a file. It takes this file\'s name on the command line, but if it\'s not provided, it defaults to a known filename (conte
Looking at the argparse code, I see:
ArgumentParser.parse_args
calls parse_known_args
and makes sure that there isn't any pending argument to be parsed.ArgumentParser.parse_known_args
sets default values and calls ArgumentParser._parse_known_args
Hence, the workaround would be to use ArgumentParser._parse_known_args
directly to detect -h
and, after that, use ArgumentParser.parse_args
as usual.
import sys, argparse
parser = argparse.ArgumentParser(description='my illustrative example', argument_default=argparse.SUPPRESS)
parser.add_argument('--content', metavar='file',
default='content.txt', type=argparse.FileType('r'),
help='file to process (defaults to content.txt)')
parser._parse_known_args(sys.argv[1:], argparse.Namespace())
args = parser.parse_args()
Note that ArgumentParser._parse_known_args
needs a couple of parameters: the arguments from the command line and the namespace.
Of course, I wouldn't recommend this approach since it takes advantage of the internal argparse
implementation and that might change in the future. However, I don't find it too messy, so you still might want to use it if you think maintenance risks pay off.