Boolean argument for script

Python

Python Problem Overview


In Python, I understand how int and str arguments can be added to scripts.

parser=argparse.ArgumentParser(description="""Mydescription""")
parser.add_argument('-l', type=str, default='info', help='String argument')
parser.add_argument('-dt', type=int, default ='', help='int argument')

What is it for booleans?

Basically I want to pass a flag into my script which will tell the script whether to do a specific action or not.

Python Solutions


Solution 1 - Python

You can either use the action with store_true|store_false, or you can use an int and let implicit casting check a boolean value.

Using the action, you wouldn't pass a --foo=true and --foo=false argument, you would simply include it if it was to be set to true.

python myProgram.py --foo

In fact I think what you may want is

parser.add_argument('-b', action='store_true', default=False)

Solution 2 - Python

parser.add_argument('--foo', action='store_true')

Solution 3 - Python

import distutils.util
ARGP.add_argument('--on', '-o', type=distutils.util.strtobool, default='true')

Example calling it:

$ ./myscript                # argp.on = 1
$ ./myscript --on=false     # argp.on = 0
$ ./myscript --on=False     # argp.on = 0
$ ./myscript --on=0         # argp.on = 0
$ ./myscript --on=1         # argp.on = 1
$ ./myscript -o0            # argp.on = 0
$ ./myscript -o false       # argp.on == 0

i should mention, you can bind the argument to a local wrapper function too, to handle some other exact string matching if you want to support values like "yes" and "no". you can also try interpreting the input as yaml, which can handle yes/no too. i haven't done this in a while though, and i think lately I've suck to mutually exclusive arguments with the same dest value, one --no-option with action='store_false', and one --option with action='store_true'

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondublintechView Question on Stackoverflow
Solution 1 - PythonsberryView Answer on Stackoverflow
Solution 2 - PythonNed BatchelderView Answer on Stackoverflow
Solution 3 - PythonThorSummonerView Answer on Stackoverflow