Python Argeparse错误

时间:2015-02-10 19:40:25

标签: python amazon-s3

我正在编写一个程序,我正在尝试使用-l为程序argeparse创建一个参数,如果使用python myprog.py -l,它将列出我的亚马逊s3存储桶的所有文件。这是我的代码:

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 个答案:

答案 0 :(得分: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。