Re: argsparse: allowing --version without mandatory options
"Jonathan N. Little" <[email protected]> Mon, 3 Nov 2025 22:19:45 -0500
| Newsgroups | comp.lang.python |
|---|---|
| Organization | LITTLE WORKS STUDIO |
| Message-ID | <[email protected]> |
Loris Bennett wrote: > "Loris Bennett" <[email protected]> writes: > >> Hi, >> >> I am writing a program for the command-line which uses 'argsparse'. I >> want to make some options mandatory by setting 'required=True', but >> still allow the program to run with the option '--version' (which just >> shows the version and then exits) even if the mandatory options are >> missing. >> >> Is there a standard way of doing this? > > I see that instead of setting required to 'True' I can use an expression > which checks whether '--version' has been given: What I do is separate it into two functions. First function that sets up the parser object and returns the parser object: def make_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser( ... ) ... return parser The code is similar to yours below, but for version my action references an f string variable: parser.add_argument( "-v", "--version", action="version", version=f"{APP_NAME} v{__version__}" ) I typically have the optional args set to a default value, null string or None. Then the second function which my main() calls this function which returns a tuple of arg values here is one example: def get_program_args() -> tuple: parser = make_parser() args = parser.parse_args() return args.action, args.profile, args.log_level def main(): # parser args action, profile_name, log_level = get_program_args() ... Works for me. > parser.add_argument( > "uid", nargs="+", > help="UIDs to send mail to" > ) > parser.add_argument( > '-s', '--subject', dest='subject', required=not '--version' in sys.argv, > help="subject of email" > ) > parser.add_argument( > '-c', '--content_file', dest='content_file', required=not '--version' in sys.argv, > help="file containing mail contents (without salutation or signature)" > ) > parser.add_argument( > '--version', action='store_true', dest='version', > help="print version" > > However, with the above, I still need to specify the mandatory argument, > even if I only want to see the version. > > I guess I'll just have to change > > nargs="+" > > to > > nargs="*" > > and check explicitly whether any arguments have been given. > > Seems odd to me though that there is not a standard way of implementing > '--version' which works like '--help' does. > > Cheers, > > Loris > -- Take care, Jonathan ------------------- LITTLE WORKS STUDIO http://www.LittleWorksStudio.com