Логічний аргумент для сценарію


79

У Python я розумію, як аргументи int та str можна додавати до сценаріїв.

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')

Що це за булеві значення?

В основному я хочу передати прапорець у свій сценарій, який повідомляє сценарію, робити певну дію чи ні.


2
В чому проблема action='store_true'?
Рік Поджі,

Якої поведінки ви хочете з логічними значеннями? (скажімо, з '-v true' та '-v false'?)
kennytm

Відповіді:


152

Ви можете використовувати або actionз store_true| store_false, або ви можете використати int і дозволити неявному кастингу перевірити логічне значення.

Використовуючи аргумент, ви actionне передасте аргумент --foo=trueand --foo=false, а просто включите його, якщо для нього потрібно встановити значення true.

python myProgram.py --foo

Насправді я думаю, що вам може знадобитися

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

7
Я не вважаю default=Falseнеобхідним.
Пол Дрейпер

24
@PaulDraper: Явне краще, ніж неявне.
sberry

@PaulDraper Я перевірив, що це не потрібно, але ви можете вказати це як явне значення.
Каумонс

@PaulDraper Хіба не за замовчуванням для логічного значення True?
Ерін


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

Приклад його виклику:

$ ./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

я повинен згадати, ви також можете прив'язати аргумент до функції локальної обгортки, щоб обробляти інші точні збіги рядків, якщо ви хочете підтримувати такі значення, як "так" та "ні". Ви також можете спробувати інтерпретувати введення як yaml, що також може обробляти так / ні. я не робив цього давно, хоча, і я думаю, останнім часом я затягував взаємовиключні аргументи з однаковим destзначенням, один --no-optionіз action='store_false', а другий --optionізaction='store_true'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.