
的命令行参数实例详解时间更新于, 二零二二年零二月二十五日, 十二时四十七分一十四秒, 作者是盼小辉丶。存有一个模块名为sys, sys.argv这个属性给予了对命令行参数的访问途径, 下面的这篇文章主要是为大家介绍了有关命令行参数实例的相关资料, 文章之中靠着实例代码介绍得极为详尽, 有需要的朋友能够参考一番。0. 命令行参数一般来讲, 针对大型项目程序, 执行该程序时, 有一个必要步骤, 那就是正确处理命令行参数, 而这些命令行参数, 是提供给包含某种参数化信息的程序或者脚本的参数, 举个例子, 在计算机视觉项目中, 图像以及不同类型的文件, 通常会作为命令行参数传递给脚本, 其目的在于让程序能够处理不同图片或者不同类型文件。常规执行程序时, 参数化的一种常见且简便方式是借助命令行参数, 接下来着重讲获取以及解析命令行参数的三种常见办法。1. sys.argv为了对命令行参数予以处理, 在其中内置了sys.argv模块, 借助模块里的sys.argv能够访问到全部的命令行参数, 其返回值是有着所有命令行参数的列表, 也就是list, 当程序开始执行时, 会从命令行获取所有的值, 并把它们存于sys.argv列表里。列表的首个元素sys.argv是脚本的完整路径, 或者是脚本名称, 这取决于具体的操作系统。列表之中的第二个元素, 关乎脚本的第一个命令行参数, 这个参数也就是 sys.argv , 按照这样的方式依次类推。这能够借助下图清晰地瞧出来, 在图里, .py 脚本采用两个参数来执行:。随后, 使我们瞧瞧sys.argv是怎样运作的, 最先撰写.py脚本:import sys print(正在运行的脚本名称: {}.format(sys.argv[0])) print(脚本的参数数量: {}.format(len(sys.argv))) print(脚本的参数: {}.format(str(sys.argv)))如果我们不使用任何参数执行这个脚本python script_1.py将会看到如下信息正在运行的脚本名称: .py脚本的参数数量: 1脚本的参数: .py如果我们使用多个参数执行此脚本:python script_1.py OpenCV -i test.png将得到以下信息正在运行的脚本名称: .py脚本的参数数量: 4脚本的参数: .py, , -i, test.png, 这些字符之间存在着特定的关联 , 有其独特的用途 , 它们以这样的组合形式出现。像上面所展示的那样, 列表里的第一个元素, 即为.py (sys.argv)的那个, 是脚本的名称。接下来, 讲到了列表的第二个元素, 也就同样是(sys.argv)的那个, 它是脚本的第一个参数。然而, 与此同时能够察觉到, sys.argv把命令行选项 -i也当作参数去看待了, 如此这般并不能够便利地达成我们的需求, 于是从而引入了模块, 以此来识别命令行选项。2.有个模块, 它专门处理命令行参数, 可用来获取命令行选项以及参数, 命令行选项能让程序的参数变得更加灵活, 它支持短选项模式, 也就是(-), 还支持长选项模式, 即(–)。该模块提供了两个方法及一个异常处理来解析命令行参数。2.1 . 方法. 方法用于解析命令行参数列表其语法格式如下getopt.getopt(args, options[, long_options])方法参数说明如下表所示参数说明args用于要予以解析的命令行参数的列表, 通常来讲是sys.argv, 而这需要将脚本名(sys.argv)过滤掉。运用以一种字符串的方式来进行定义, 之后的冒号 “:”意思是要是去设置这个所需选项, 必然得存在附加着的参数, 不然便不加额外参数。以列表的样式进行定义, 之后的等号 “” 意味着该选项必定要有额外添加的参数, 没有带上冒号表明该选项不附带参数。此方法返回值由两个元素构成, 其一为(, value)元组的列表, 其二是参数列表, 也就是存有那些不存在 - 或 – 的参数的列表。下面编写 .py 脚本进行演示import sys import getopt def main(argv): input_file output_file # hi:o:: 短格式分析串, h 后面没有冒号, 表示后面不带参数; i 和 o 后面带有冒号, 表示后面带参数 # [help, input_file, output_file]: 长格式分析串列表, help后面没有等号, 表示后面不带参数; input_file和output_file后面带冒号, 表示后面带参数 # 返回值包括 opts 和 args, opts 是以元组为元素的列表, 每个元组的形式为: (选项, 附加参数)如: (-i, test.png); # args是个列表其中的元素是那些不含-或--的参数 opts, args getopt.getopt(argv[1:], hi:o:, [help, input_file, output_file]) for opt, arg in opts: if opt in (-h, --help): print(script_2.py -i -o ) print(or: test_arg.py --input_file --output_file) sys.exit() elif opt in (-i, --input_file): input_file arg elif opt in (-o, --output_file): output_file arg print(输入文件为, input_file) print(输出文件为, output_file) # 打印不含-或--的参数 for i in range(0, len(args)): print(不含-或--的参数 %s 为%s % (i 1, args[i])) if __name__ __main__: main(sys.argv)-o ) print(or: test_arg.py --input_file --output_file) sys.exit() elif opt in (-i, --input_file): input_file arg elif opt in (-o, --output_file): output_file arg print(输入文件为, input_file) print(输出文件为, output_file) # 打印不含-或--的参数 for i in range(0, len(args)): print(不含-或--的参数 %s 为%s % (i 1, args[i])) if __name__ __main__: main(sys.argv)使用带有命令行选项的命令执行此脚本以下两种方式是等价的# 方式1 python scripy_1.py -i test.png -o output.png OpenCV # 方式2 python scripy_1.py --input_file test.png --output_file output.png OpenCV输出得到以下信息输入文件为 test.png输出文件为 .png“-”或者“--”都不包含的, 参数1显现为:2.2 .若处于参数列表里未寻觅到所传参数之状况, 又或许待选项所需的参数变为空的时候会激发此异常, 此异常中的参数是个字符串用以表明错误缘由, 属性msg以及opt是相关选项的错误讯息。在上述代码中添加异常处理检查此错误信息# ... def main(argv): input_file output_file try: opts, args getopt.getopt(argv[1:], hi:o, [help, input_file, output_file]) except getopt.GetoptError as e: print(e.msg) print(e.opt) sys.exit(2) # ...使用错误的格式选项传递参数执行脚本python scripy_1.py -f输出以下错误信息option -f not recognized f3.在程序运用复杂参数或者多个文件名之际, 推荐运用那个以系统方式处理命令行参数以期能够编写用户友好型命令行程序的库 , 标准库亦是用于解析命令行参数的模块。首先 , 程序要确定所需参数 , 接着 , 把这些参数解析成sys.argv。另外 , 会生成帮助以及使用信息提示 , 并且在给出无效参数时发出错误。为了介绍此模块编写 .py如下所示import argparse parser argparse.ArgumentParser() parser.parse_args()此脚本若不携带参数去运行, 便不会朝着显示任何内容。可但是, 要是运用 --help 或者 -h 选项, 那就会获取到脚本的使用信息给予提示:usage: scripy_3.py [-h] optional arguments: -h, --help show this help message and exit指定其他参数会导致错误例如使用如下命令scripy_3.py -i则会报导致错误usage: .py.py: error: : -i由于存在未被定义的参数, 以至于并不允许其他的参数, 紧接着就要添加一个参数, 去编写一个 .py 脚本, 至此import argparse parser argparse.ArgumentParser() parser.add_argument(first_argument, helpthis is the string text in connection with first_argument) args parser.parse_args() print(args.first_argument)这里增添了()方法, 该方法用以指明程序会接纳哪些命令行选项, 此处增添了参数, 另外, 模块储存所有参数, 把与每个增添参数名称相匹配的名称与之对应——在此处是, 为了获取参数值, 得使用args.。如果此脚本以下示方法执行则输出为 10python scripy_4.py 10但如果脚本在没有参数的情况下执行则将输出以下信息usage: .py.py: error: the are :最后如果我们使用 -h 选项执行脚本输出将如下所示usage: .py:this is the text in with:展示这个帮助, 然后退出, 使用 -h 或者 --help 选项。通常所说的默认情形之内, 认定所给出的那些选项当作字符串来看。这般一来, 要是参数并非字符串的话, 那么就应当运用type选项。运用.py脚本, 在其中增添了两个参数, 这两个参数属于int类型。import argparse parser argparse.ArgumentParser() parser.add_argument(first_number, helpfirst number to be added, typeint) parser.add_argument(second_number, helpsecond number to be added, typeint) args parser.parse_args() print(args: {}.format(args)) print(the sum is: {}.format(args.first_number args.second_number)) args_dict vars(parser.parse_args()) print(args_dict dictionary: {}.format(args_dict)) print(first argument from the dictionary: {}.format(args_dict[first_number]))在先前的示例里头, 借助调用 vars() 这个函数, 把参数存储于字典当中:args_dict vars(parser.parse_args()) print(args_dict dictionary: {}.format(args_dict)) print(first argument from the dictionary: {}.format(args_dict[first_number]))如果不带参数执行脚本python script_5.py则输出如下usage: .py.py: error: the are : ,此外如果我们使用 -h 选项执行脚本python script_5.py --help输出将如下所示usage: .py:first to be addedto be added:呈示此帮助, 然后退出, 通过 -h, 或者 --help 来达成。如果此脚本以如下方式执行python script_5.py 123 456则输出如下args: (123, 456)the sum is: 579有这样一个集合, 里面有两个元素, 一是空字符串关联的值 123, 二是空字符串关联的值 456。从“123”开始, 首先是这个, 从这里起始, 最初源于“123”。可供看到的更多高级介绍, 是在官方文档之中, 那里包含着大量示例。总结到了此处, 这一篇针对令行参数详细解析的文章, 便介绍至这儿了, 更多与之相关的令行参数内容, 需去搜索脚本之家以往的文章, 或者继续浏览下面相关的文章, 期望大家往后多多对脚本之家予以支持