2016-06-20 4 views
-2

Я новичок в python и пытаюсь использовать Parser для параметров командной строки, аргументов и подкоманды.Как написать argparse в python с использованием абстрактного базового класса

Моя команда должна выглядеть следующим образом:

, если магазин в s3 или быстр, то:

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

Пожалуйста, предоставьте мне подсказку, чтобы начать код.

+0

argparse поддерживает подкоманды из коробки. С чем вы столкнулись? – mgilson

ответ

0

Это звучит, как вы хотите, 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.

+0

Спасибо, мне это полезно – sk1007

 Смежные вопросы

  • Нет связанных вопросов^_^