python中的argparse库

本文详细介绍Python标准库中的argparse模块,用于处理命令行参数。包括位置参数和选项参数的概念,argparse模块的基本使用步骤,以及ArgumentParser和add_argument方法的详细参数说明。

本文是转载文章,原文链接,侵删。

1、定义:argparse是python标准库里面用来处理命令行参数的库

2、命令行参数分为位置参数和选项参数:
        位置参数就是程序根据该参数出现的位置来确定的
                如: [root @openstack_1  /]#  ls  root/    #其中root/是位置参数
        选项参数是应用程序已经提前定义好的参数,不是随意指定的
                如: [root @openstack_1  /]#  ls  -l    # -l 就是ls命令里的一个选项参数

 3、使用步骤:

(1)import argparse    首先导入模块
                        (2)parser = argparse.ArgumentParser()    创建一个解析对象
                        (3)parser.add_argument()    向该对象中添加你要关注的命令行参数和选项
                        (4)parser.parse_args()    进行解析

 4、argparse.ArgumentParser()方法参数须知:一般我们只选择用description

 prog=None     - 程序名

         description=None,    - help时显示的开始文字
          epilog=None,     -  help时显示的结尾文字
         parents=[],        -若与其他参数的一些内容一样,可以继承
         formatter_class=argparse.HelpFormatter,     - 自定义帮助信息的格式
         prefix_chars='-',    - 命令的前缀,默认是‘-’
         fromfile_prefix_chars=None,     - 命令行参数从文件中读取
         argument_default=None,    - 设置一个全局的选项缺省值,一般每个选项单独设置
         conflict_handler='error',     - 定义两个add_argument中添加的选项名字发生冲突时怎么处理,默认处理是抛出异常
         add_help=True    - 是否增加-h/--help选项,默认是True)

 5、add_argument()方法参数须知:

  name or flags...    - 必选,指定参数的形式,一般写两个,一个短参数,一个长参数

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('echo') # add_argument()指定程序可以接受的命令行选项
args = parser.parse_args() # parse_args()从指定的选项中返回一些数据
print(args)
print(args.echo)
结果:
G:\flower\python\arg_parse>python demo1.py foo
Namespace(echo='foo')
foo

 action 表示值赋予键的方式,这里用到的是bool类型,action意思是当读取的参数中出现指定参数的时候的行为

help 可以写帮助信息 

parser = argparse.ArgumentParser(description = 'this is a description')
parser.add_argument('--ver', '-v', action = 'store_true', help = 'hahaha')
# 将变量以标签-值的字典形式存入args字典
args = parser.parse_args()
if args.ver:
print("Ture")
else:
print("False")
结果:
G:\flower\python\arg_parse>python demo1.py -v

 

Ture
G:\flower\python\arg_parse>python demo1.py -j
usage: demo1.py [-h] [--ver]
demo1.py: error: unrecognized arguments: -j

   required    - 必需参数,通常-f这样的选项是可选的,但是如果required=True那么就是必须的了

 type   - 指定参数类型

# required标签就是说--ver参数是必需的,并且类型为int,输入其它类型会报错
parser.add_argument('--ver', '-v', required = True, type = int)
结果:

 

G:\flower\python\arg_parse>python demo1.py -v 1
Ture
G:\flower\python\arg_parse>python demo1.py -v ss
usage: demo1.py [-h] --ver VER
demo1.py: error: argument --ver/-v: invalid int value: 'ss'

  choices    - 设置参数的范围,如果choice中的类型不是字符串,要指定type

表示该参数能接受的值只能来自某几个值候选值中,除此之外会报错,用choice参数即可

 

parser.add_argument('file', choices = ['test1', 'test2'])
args = parser.parse_args()
print('read in %s'%(args.file))
结果:
G:\flower\python\arg_parse>python demo1.py test1
read in test1

 nargs    - 指定这个参数后面的value有多少个,默认为1

# 表示脚本可以读入两个整数赋予num键(此时的值为2个整数的数组)
parser.add_argument('filename', nargs = 2, type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))
结果:
G:\flower\python\arg_parse>python demo1.py 1 2 3

 

usage: demo1.py [-h] filename filename
demo1.py: error: unrecognized arguments: 3
分析:nargs还可以'*'用来表示如果有该位置参数输入的话,之后所有的输入都将作为该位置参数的值;‘+’表示读取至少1个该位置参数。'?'表示该位置参数要么没有,要么就只要一个。(PS:跟正则表达式的符号用途一致。)
如:
parser.add_argument('filename', nargs = '+', type = int)
args = parser.parse_args()
print('read in %s'%(args.filename))

  dest   - 设置这个选项的value解析出来后放到哪个属性中

parser.add_argument('-file', choices = ['test1', 'test2'], dest = 'world')
args = parser.parse_args()
print('read in %s'%(args.world))
结果:

 

G:\flower\python\arg_parse>python demo1.py -file test1
read in test1

以上 

 

 

 

<think>好的,我现在需要帮助用户了解Pythonargparse的详细用法。首先,我应该回忆一下argparse的基本功能和常用方法。根据用户提供的引用内容,argparse是用于解析命令行参数的模块,取代了早期的optparse和getopt。用户可能需要从基础开始,逐步深入。 首先,用户可能需要知道如何导入并创建ArgumentParser对象。引用[1]和[3]提到,第一步是创建这个对象,它是参数解析的基础。然后,添加参数的方法,比如add_argument,这里引用[5]详细说明了add_argument的参数,比如name、action、type等。 接下来,用户可能需要示例代码来理解如何实际应用。例如,如何定义位置参数、可选参数,以及如何处理不同类型的参数,如整数、字符串,或者标志参数(比如-v)。引用[3]中的例子展示了混合使用不同类型参数的情况,比如位置参数arg1,标志参数-v,选项参数--output等。 用户还可能关心如何解析参数并获取结果。引用[3]中的代码片段显示,使用parse_args()方法解析参数,并将结果存储在args对象中。这部分需要详细说明,以便用户知道如何访问解析后的参数值。 此外,高级用法可能包括参数组、互斥组、子命令等。比如,使用add_mutually_exclusive_group创建互斥参数,或者使用subparsers处理子命令,这在创建复杂命令行工具时很有用。引用[5]提到了add_argument的各种属性,如required、choices,这些可以用来限制参数的有效值。 用户可能还会遇到常见问题,例如参数类型转换、默认值设置、帮助信息的生成等。需要提醒用户注意参数类型的使用,比如type=int,以及如何通过help参数提供描述信息。引用[4]指出argparse能自动生成帮助信息,这在使用-h时非常方便。 在组织内容时,应该按照从基础到高级的顺序,分步骤讲解。例如,先介绍创建解析器,添加参数,解析参数,然后逐步引入更复杂的用例。每个步骤都配上示例代码,帮助用户理解。同时,结合用户提供的引用内容,确保信息的准确性,并在适当的位置添加引用标识。 最后,生成相关问题需要考虑用户可能进一步探索的方向。比如,如何处理参数冲突?如何自定义参数验证?如何国际化帮助信息?这些扩展问题可以帮助用户深入学习和应用argparse。</think>### Python argparse全面教程 #### 一、基础概念 argparsePython标准中用于**解析命令行参数**的模块,支持定义参数类型、生成帮助信息,并自动处理用户输入[^4]。其核心流程分为三步: 1. 创建参数解析器 2. 添加参数定义 3. 解析参数并调用业务逻辑 #### 二、基础使用步骤 ```python import argparse # 1. 创建解析器 parser = argparse.ArgumentParser(description="程序描述") # 2. 添加参数 parser.add_argument("filename", help="输入文件名") # 位置参数 parser.add_argument("-v", "--verbose", action="store_true", help="显示详细信息") # 可选参数 parser.add_argument("--output", type=str, default="result.txt", help="输出文件路径") # 带类型和默认值的参数 # 3. 解析参数 args = parser.parse_args() # 使用参数 if args.verbose: print(f"正在处理文件: {args.filename}") ``` #### 三、参数类型详解 | 参数类型 | 说明 | 示例 | |-----------------|----------------------------------------------------------------------|----------------------------------------------------------------------| | 位置参数 | 必须提供的参数,顺序敏感 | `parser.add_argument("input", help="输入文件")` | | 可选参数 | 以`-`或`--`开头的参数 | `parser.add_argument("-o", "--output", help="输出文件")` | | 类型限定 | 指定参数数据类型 | `parser.add_argument("--num", type=int)` | | 默认值 | 参数未提供时的默认值 | `parser.add_argument("--level", default=1)` | | 必选参数 | 强制要求提供的参数 | `parser.add_argument("--config", required=True)` | | 多值参数 | 接收多个值的参数 | `parser.add_argument("--files", nargs='+')` | | 互斥参数 | 不能同时使用的参数组 | 使用`add_mutually_exclusive_group()`创建 | #### 四、高级功能 1. **参数验证** ```python # 限制取值范围 parser.add_argument("--size", type=int, choices=[16, 32, 64]) # 自定义验证 def check_positive(value): ivalue = int(value) if ivalue <= 0: raise argparse.ArgumentTypeError("必须是正整数") return ivalue parser.add_argument("--batch", type=check_positive) ``` 2. **子命令处理** ```python subparsers = parser.add_subparsers(title='子命令', dest='command') # 创建下载子命令 parser_download = subparsers.add_parser('download', help='下载文件') parser_download.add_argument("url", help="下载地址") # 创建上传子命令 parser_upload = subparsers.add_parser('upload', help='上传文件') parser_upload.add_argument("path", help="文件路径") ``` #### 五、完整使用示例 ```python import argparse def main(): parser = argparse.ArgumentParser( prog="FileProcessor", description="文件处理工具", epilog="示例: python script.py input.txt --output out.txt -v" ) # 位置参数 parser.add_argument("input", help="输入文件路径") # 可选参数 parser.add_argument("-o", "--output", required=True, type=str, help="输出文件路径") # 标志参数 parser.add_argument("-v", "--verbose", action="store_true", help="显示详细日志") # 互斥组 group = parser.add_mutually_exclusive_group() group.add_argument("--fast", action="store_true", help="快速模式") group.add_argument("--safe", action="store_true", help="安全模式") args = parser.parse_args() # 业务逻辑 print(f"处理文件: {args.input}") if args.verbose: print("进入详细模式...") if __name__ == "__main__": main() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值