argparse — adding a --version flag in the face of positional args

Loris Bennett loris.bennett at fu-berlin.de
Mon Nov 28 01:59:44 EST 2022


Mats Wichmann <mats at wichmann.us> writes:

> On 11/27/22 16:40, Skip Montanaro wrote:
>> I have a script to which I'd like to add a --version flag. It should print
>> the version number then exit, much in the same way --help prints the help
>> text then exits. I haven't been able to figure that out. I always get a
>> complaint about the required positional argument.
>> I think I could use something like nargs='*', but that would push
>> off
>> detection of the presence of the positional arg to the application.
>> Shouldn't I be able to tell argparse I'm going to process --verbose, then
>> exit?
>
> ummm, hate to say this, but have you checked the documentation?  this
> case is supported using an action named 'version' without doing very
> much.

I hadn't noticed the action 'version'.  I just use

    parser.add_argument(
        "-v", "--version", action="store_true", dest="version",
        help="print version"
    )

    ...

   if args.version:
        print(f"Version {my_module.__version__}")
        sys.exit(0)

where the version is specified in a pyproj.toml file and __init__.py
contains

    try:
        import importlib.metadata as importlib_metadata
    except ModuleNotFoundError:
        import importlib_metadata

    __version__ = importlib_metadata.version(__name__)

I use poetry to then build the corresponding versioned package.

What am I missing by not using the action 'version'?  Do I just save
having to explicitly test for the version arg?

Cheers,

Loris

-- 
This signature is currently under constuction.


More information about the Python-list mailing list