在 argparse 中定义参数个数

Define the number of arguments in 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)

可以查看参数个数,然后查看文件是否存在

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()特定的后缀等等.

正如所写,如果您不给它 2 个参数,parser 将会抱怨。试试吧!

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