В 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'])
Комментариев нет:
Отправить комментарий