Search code examples
pythonargparse

Python argparse with -- as the value


Is there a way to pass -- as a value to a Python program using argparse without using the equals (=) sign?

The command line arguments that I added to the argparser are defined like below:

parser.add_argument('--myarg', help="my arg description")

You would use this argument in a program like this:

python myprogram.py --myarg value123

Is there a way to run this program with -- as the value instead of 'value123'?

i.e

python myprogram.py --myarg --

Solution

  • I suspect it will not be possible to make argparse do this natively. You could pre-process sys.argv though, as a non-intrusive workaround.

    import sys
    from argparse import ArgumentParser
    from uuid import uuid4
    
    sentinel = uuid4().hex
    
    def preprocess(argv):
        return [sentinel if arg == '--' else arg for arg in argv[1:]]
    
    def postprocess(arg):
        return '--' if arg == sentinel else arg
    
    parser = ArgumentParser()
    parser.add_argument('--myarg', help="my arg description", type=postprocess)
    args = parser.parse_args(preprocess(sys.argv))