2016-06-20 5 views
-2

저는 python에서 새롭고 명령 행 옵션, 인수 및 부속 명령에 Parser를 사용하려고합니다.추상 기본 클래스를 사용하여 Python에서 argparse를 작성하는 방법

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

방법도 파서을 writting 시작하는 부속 명령 (목록, 백업을 위해 인수를 변경됩니다, 복원)는 S3/SWIFT에 따라 다릅니다.

누군가 코드를 시작하기위한 힌트를 제공해주십시오.

+0

argparse는 기본 제공되는 하위 명령을 지원합니다. 정확히 무슨 문제가 있습니까? – mgilson

답변

0

당신이 하위 명령의 2 개 수준, list 사이 S3Swift 다른 구별 하나를 원하는 것 같은데 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

관련 문제