• argsparse: allowing --version without mandatory options

    From Loris Bennett@loris.bennett@fu-berlin.de to comp.lang.python on Thu Oct 30 11:12:28 2025
    From Newsgroup: comp.lang.python

    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?

    Cheers,

    Loris
    --
    This signature is currently under constuction.
    --- Synchronet 3.21a-Linux NewsLink 1.2
  • From Loris Bennett@loris.bennett@fu-berlin.de to comp.lang.python on Thu Oct 30 13:50:42 2025
    From Newsgroup: comp.lang.python

    "Loris Bennett" <loris.bennett@fu-berlin.de> 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:

    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
    --
    This signature is currently under constuction.
    --- Synchronet 3.21a-Linux NewsLink 1.2