Как написать argparse на python, используя абстрактный базовый класс
Я новичок в Python и пытаюсь использовать Parser для параметров командной строки, аргументов и подкоманд.
Моя команда должна выглядеть так:
если хранить в s3 или swift то:
$snapshotter S3 [-h] [-v] --aws-access-key-id AWS_ACCESS_KEY_ID
--aws-secret-access-key AWS_SECRET_ACCESS_KEY
--s3-bucket-name S3_BUCKET_NAME
{list,backup,restore} ...
$snapshotter Swift [-h] [-v] --swift-url SWIFT_URL
--key SWIFT_KEY
--password PASSWORD
{list,backup,restore} ...
Как начать писать анализатор, а также будут изменены аргументы для подкоманд (список, резервное копирование, восстановление), зависит от S3/SWIFT.
Пожалуйста, кто-нибудь предоставит мне подсказку для запуска кода.
1 ответ
Похоже, вы хотите 2 уровня подкоманд, один из которых различает S3
а также Swift
и другой между list
, backup
и т.п.
Эта структура делает это:
import argparse
parser = argparse.ArgumentParser()
sp1 = parser.add_subparsers(dest='cmd1')
ps3 = sp1.add_parser('S3')
ps3.add_argument('--aws-access-key-id')
# more
sp2 = ps3.add_subparsers(dest='s3cmd')
list3 = sp2.add_parser('list')
list3.add_argument('-f')
psW = sp1.add_parser('Swift')
psW.add_argument('--switft-url')
# more
spW = psW.add_subparsers(dest='s3cmd')
listW = spW.add_parser('list')
listW.add_argument('-g')
args=parser.parse_args()
print(args)
Некоторые примеры прогонов:
1311:~/mypy$ python stack37930737.py -h
usage: stack37930737.py [-h] {S3,Swift} ...
positional arguments:
{S3,Swift}
optional arguments:
-h, --help show this help message and exit
1311:~/mypy$ python stack37930737.py S3 -h
usage: stack37930737.py S3 [-h] [--aws-access-key-id AWS_ACCESS_KEY_ID]
{list} ...
positional arguments:
{list}
optional arguments:
-h, --help show this help message and exit
--aws-access-key-id AWS_ACCESS_KEY_ID
1312:~/mypy$ python stack37930737.py S3 list -h
usage: stack37930737.py S3 list [-h] [-f F]
optional arguments:
-h, --help show this help message and exit
-f F
1315:~/mypy$ python stack37930737.py S3 --aws 234 list -f 34
Namespace(aws_access_key_id='234', cmd1='S3', f='34', s3cmd='list')
Главный parser
реализует S3/Swift
подпарсерский протокол. Каждый из этих подпарсеров реализует свою собственную версию list/backup,etc
выбор.