🟢 Консольні аргументи (Command-line Arguments). Практика.
У python для розбору консольних аргументів використовується стандартна бібліотека argparse
Вона бере на себe:
1️⃣ Розбір аргументів на підкоманди, опції, позиційні аргументи, значення.
2️⃣ Конвертацію аргументів у заданий тип
3️⃣ Обробку помилок неправильного застосування консольних аргументів
4️⃣ Об'єднання позиційних аргументів у одну змінну-список
5️⃣ Генерацію довідки по консольним аргументам.
Напишемо просту програму яка має дві підкоманди для суми та добутку чисел:
import argparse
import enum
import math
class SubCommand(enum.StrEnum):
SUM = enum.auto()
MULT = enum.auto()
def main():
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(
dest='subcommand',
title='subcommands',
required=True,
)
sum_parser = subparsers.add_parser(
SubCommand.SUM.value,
help="sum float values",
)
sum_parser.add_argument('values', type=float, nargs='+')
mult_parser = subparsers.add_parser(
SubCommand.MULT.value,
help="multiply float values",
)
mult_parser.add_argument('values', type=float, nargs='+')
args = parser.parse_args()
match args.subcommand:
case SubCommand.SUM:
result = sum(args.values)
case SubCommand.MULT:
result = math.prod(args.values)
print(result)
if __name__ == '__main__':
main()
Приклад виводу:
python main.py sum 3 4 5
12.0
python main.py mult 3 4 5
60.0
python main.py mult a b
usage: main.py mult [-h] values [values ...]
main.py mult: error: argument values: invalid float value: 'a'
argparse по замовченню додає опцію —-help по якій виводиться довідка по консольним аргументам:
python main.py --help
usage: main.py [-h] {sum,mult} ...
options:
-h, --help show this help message and exit
subcommands:
{sum,mult}
sum sum float values
mult multiply float values
Виклик методу sum_parser.add_argument('values', type=float, nargs='+') вказує парить позиційні аргументи зі збереженням їх у атрибут args.values у вигляді списку. Якщо ми вказуємо тип type=float відбувається конвертацію аргументів і вказаний тип. Вказання nargs='+' дає нам упаковку декількох аргументів у один список, в даному випадку має бути що найменше один аргумент
🔗 Переклад офіційної документації python: argparse
👍1
367 ·