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
-- 
https://mail.python.org/mailman3//lists/python-list.python.org

Reply via email to