2015-02-10 57 views
0

我寫在那裏我試圖使用argeparse程序-l:如果你使用python myprog.py -l它會列出所有文件罪創建一個參數的程序我的Amazon S3 bucket.This是我的代碼:Python的Argeparse錯誤

from ConfigParser import RawConfigParser 
from boto.s3.connection import S3Connection 
from boto.s3.key import Key 
import argparse 

config = RawConfigParser() 
config.read('tm/aws.cfg') 
conn = S3Connection(config.get('prodAws', 'aws_access_key_id'), config.get('prodAws', 'aws_secret_access_key')) 
bucket = conn.get_bucket(config.get('prodAws', 'bucket')) 

parser = argparse.ArgumentParser() 
parser.add_argument("-l", "--list",type=str, help= "Lists content of bucket name specified" , default = config.get('prodAws', 'bucket')) 
args = parser.parse_args() 

if args.list: 
    for key in bucket.list(): 
     print key.name 

但是,當我運行python myprog.py -l它給了我一個error: argument -l/--list: expected one argument。在-l之後總是需要一些字符串,即使其像ksdjhjk這樣的亂碼也是如此。我嘗試將nargs添加到parser.add_argument中,但沒有用。

任何幫助?

回答

1

當您使用typenargs時,解析器需要至少一個參數。改爲使用action="store_true"。如果沒有-l,則鍵args.list將爲False。

parser.add_argument("-l", "--list", action="store_true", help="Lists content of bucket name specified" , default=config.get('prodAws', 'bucket')) 

反之亦然,你可以使用store_false設置默認args.list參數設置爲True。

+0

作品!感謝'type'中的提示 – letsc 2015-02-10 19:50:38