2016-06-20 5 views
-2

私はPythonで新しく、コマンドラインオプション、引数、サブコマンドにParserを使用しようとしています。抽象基本クラスを使ってPythonでargparseを書くには

私のコマンドのように次のようになります。店ならば、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つのレベル、listS3Swiftと他を区別1を、したいように聞こえる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はを実装サブパーサープロトコル。これらのサブパーザのそれぞれは、独自のバージョンのlist/backup,etcを実装しています。

+0

ありがとう、それは私のために便利です – sk1007

関連する問題