我正在编写一个程序,我正在尝试使用-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`但没有用。
任何帮助?
答案 0 :(得分:1)
当您使用type
或nargs
时,解析器至少需要一个参数。请改用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。