Страницы

Поиск по вопросам

среда, 3 апреля 2019 г.

Как объявить, описать и проверить параметры командной строки в Python?

В PowerShell есть замечательная возможность объявления параметров скрипта, их проверки, и автоматического описания. Записывается так:

[CmdletBinding()] Param( # Имя адаптера, обязательное, явно задавить имя параметра не нужно, определяется по позиции. [Parameter(Mandatory=$True,Position=1)] [string]$AdapterName,
# Целевые адреса в виде адрес/маска, например 192.168.72.0/24 [Parameter(Mandatory=$True)] [string[]]$TargetNets )
А также с проверкой:
[ValidateSet("Tom","Dick","Jane")] [String]$Name,
[ValidateRange(21,65)] [Int]$Age,
[ValidateScript({Test-Path $_ -PathType 'Container'})] [string]$Path
При ошибке ввода оболочка подскажет что и где и как должно быть. Подробнее тут и тут. Param также применим к функциям. Есть ли нечто подобное в Python?


Ответ

Пример кода, который показывает как реализовать оба примера из вопроса, используя argparse
#!/usr/bin/env python3 import argparse import pathlib
def valid_dir(path): path = pathlib.Path(path) try: if path.is_dir(): return path except OSError: pass raise argparse.ArgumentTypeError('%s is not a valid directory' % (path,))
parser = argparse.ArgumentParser() parser.add_argument('adapter-name') parser.add_argument('targetnets', nargs='+') parser.add_argument('--name', choices={"Tom", "Dick", "Jane"}) parser.add_argument('--age', type=int, choices=range(21, 65)) parser.add_argument('--path', type=valid_dir) print(parser.parse_args())
См. directory path types with argparse
Пример запуска:
$ python3 . lo 10.0.3.0/24 127.0.0.0/8 --name Tom --age 22 --path . Namespace(adapter-name='lo', age=22, name='Tom', path=PosixPath('.'), targetnets=['10.0.3.0/24', '127.0.0.0/8'])

Комментариев нет:

Отправить комментарий