-2

私はPythonが初めてで、コマンドラインオプション、引数、およびサブコマンドにパーサーを使用しようとしています。

私のコマンドは次のようになります。

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

サブコマンド (list、backup、restore) の引数は S3/SWIFT に依存します。

誰かがコードを開始するためのヒントを教えてください。

4

1 に答える 1

0

2 レベルのサブコマンドが必要なようです。1 つは と を区別S3し、Swiftもう1 つは を区別します。listbackup

この構造は次のことを行います。

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

于 2016-06-20T20:17:49.053 に答える