命令行解析——argparse模块


命令行解析——argparse模块

    • 一、为什么要使用argparse模块?
    • 二、使用argparse模块主要有哪些步骤?
        • 1 导入模块——argparse
        • 2 创建解析器——ArgumentParser
        • 3 添加参数选项——add_argument
        • 4 程序调用参数——parse_args
        • 5 如何使用?
            • (1) 脚本式
            • (2) 交互式
    • 三、ArgumentParser解析器详解
    • 四、add_argument添加参数选项详解
    • 参考

一、为什么要使用argparse模块? ??为了提升效率,加上提高代码的可复用性,大型的任务中,我们一般不会直接把参数硬编码在程序中,而是通过命令行传入相应的参数,这样的方式更加灵活,且效率更高;甚至,我们都不会从命令行去传入参数,而是通过sh文件,shell脚本编程来传入相应的参数。
??之前还有个optparse,但是Python2.7之后不再对optparse模块进行扩展。
??另外sys模块也可以进行简单的解析。如图,sys.argv[0]代表文件名,sys.argv[n]代表参数n,本质是命令行传入的参数以列表的形式保存在sys.argv这个变量中。在参数很多,有些不需要传入,有些取固定值,有些有数据类型要求,有些参数要传递多个等情况下sys.argv便无法胜任。
二、使用argparse模块主要有哪些步骤? 1 导入模块——argparse
import argparse

2 创建解析器——ArgumentParser ??argparse模块是一个类,因此首先要建立一个对象(ArgumentParser)
parser = argparse.ArgumentParser()# 实例化

3 添加参数选项——add_argument
parser.add_argument('name')# 添加位置参数,必须给定 parser.add_argument('-a','--age', type=int, dest='age')# 添加可选参数,可选给定

4 程序调用参数——parse_args
args = parser.parse_args()# 返回一个命名空间,方便使用变量 args_all = args.__dict__# 取出所有参数,字典(key,val) args_name = args.name# 取出name参数,val

5 如何使用? (1) 脚本式
vim argparse_test.py ___________________________________________________________ import argparsedef argparse_test(): parser = argparse.ArgumentParser()parser.add_argument('name',type=str) parser.add_argument('-a','--age', type=int, dest='age') args = parser.parse_args() print('单个调用参数') print(args.name) print(args.age)print('一次调用全部参数') args_all = args.__dict__ for key,value in args_all.iteritems(): print ('%s = %s'%(key,value))if __name__ == '__main__': argparse_test() ___________________________________________________________ python3 argparse_test.py tianyu -a 22# 常用 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 单个调用参数 tianyu 22 一次调用全部参数 name = tianyu age = 22 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(2) 交互式
import argparseparser = argparse.ArgumentParser()parser.add_argument('name') parser.add_argument('-a','--age', type=int, dest='age') args = parser.parse_args('tianyu -a 22'.split())# 测试时才用 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Namespace(age=22, name='tianyu') +++++++++++++++++++++++++++++++++++++++++++++++++++++++++

三、ArgumentParser解析器详解
argparse.ArgumentParser( prog=None,# 程序名,默认使用文件名,可以自定义,程序中可以通过%(prog)s引用程序名 usage=None,# 用法信息,默认自动生成,也可以自定义 description=None,# help信息前显示的信息 epilog=None,# help信息之后显示的信息 parents=[],# 由ArgumentParser对象组成的列表,它们的arguments选项会被包含到新ArgumentParser对象中 formatter_class=argparse.HelpFormatter,# help信息输出的格式,为了美观,详见“参考3” prefix_chars='-',# 参数前缀,默认为’-‘(最好不要修改) fromfile_prefix_chars=None,# 前缀字符,放在文件名之前,文件内是参数,参数多时使用 argument_default=None,# 设置一个全局的选项的缺省值,一般每个选项单独设置,基本没用 conflict_handler='error',# 解决冲突的策略,默认情况下冲突会发生错误(最好不要修改) add_help=True)# 是否增加-h/-help选项 (默认为True),一般help信息都是必须的

四、add_argument添加参数选项详解
ArgumentParser.add_argument( name or flags...# 指定位置参数,如 'name' ;或指定可选参数,如 '-n','--name' [, action]# 指定如何处理命令行给出的参数,如 'store'-仅保存参数值,默认;'store_const'-仅保存const关键字指定的值,而不能自己指定参数值;'store_true'和'store_false'-仅保存True和False,而不能自己指定参数值;'append'-将相同参数的不同值保存在一个list中;'count'-统计该参数出现的次数;'version'-输出程序版本信息,('--version', action='version', version='%(prog)s 2.0') [, nargs]# 指定参数的数量,如整数 'n' - n个参数保存在一个list中;'*' -任意多个保存在一个list中;'+' -一个及其以上保存在一个list中;'?' -一次从命令行、const和default中取值,直至取到值;'argparse.REMAINDER' -命令行其余参数保存到一个list中 [, const]# 保存一个常量 [, default]# 设置参数缺省时的默认值, [, type]# 指定参数类型,默认为str,也可以设置为int和float [, choices]# 设置参数值范围,如果choices中的类型不是字符串,记得指定type,('x', type=int, choices=range(1, 4)) [, required]# 指定该选项是否必选,默认为可选(即False) [, help]# 描述选项的作用 [, metavar]# 帮助信息中显示的参数名(用来提示) [, dest])# 保存参数的变量名,可自定义),默认从选项中提取

参考 【命令行解析——argparse模块】1 Python解析命令行参数,你到底会不会用argparse?
2 33 Python 详解命令解析 - argparse
3 python命令行解析模块argparse
4 argparse — Parser for command-line options, arguments and sub-commands

    推荐阅读