定义argparse中的参数个数

时间:2016-04-07 20:57:49

标签: python-2.7 argparse

我使用argparse向我的脚本传递两个不同的参数(它们实际上是两个文件:一个图像和一个json文件)并使用它们来初始化我的实例。这很有效。但是,如果我想处理我传递错误数量的参数(少于两个)或两个参数 - 两个文件 - 不存在的情况怎么办?

parser = argparse.ArgumentParser(description='MyAgonism')
parser.add_argument('image')
parser.add_argument('json')
args = parser.parse_args()

MyAgonism = board(args.json, args.image)

2 个答案:

答案 0 :(得分:1)

正如所写,如果你不给它2个论点,parser会抱怨。试试吧!

至于检查参数是否有效 - 文件存在,可以打开等 - 可以使用正常的Python错误检查和消息。 argparse是一个解析器,而不是一个完整的编程脚本。

答案 1 :(得分:0)

您可以检查参数的数量,然后检查文件是否存在。

def validate_num_of_args(args):
    return True if len(vars(args)) == 2 else False

def validate_image_arg(imagearg):
    has_found_image = True if os.path.exists(imagearg) else False
    has_valid_name = True if imagearg.endswith("jpeg") or imagearg.endswith("png") else False
    return has_found_image and has_valid_name

def validate_json_arg(jsonarg):
    ...
    ...

def validate_args(args):
    if validate_num_of_args(args):
    jsonarg, imagearg = args.json, args.image
        if validate_json_arg(jsonarg) and validate_image_arg(imagearg):
        pass
            # do your thing
        else:
        print "Error, invalid json/images files"
    else:
    print "Error, invalid number of arguments"

如果您的json和图像文件具有命名约定,您还可以检查文件名,例如检查文件startswith()特定前缀和endswith()特定后缀等。