python中的命令行参数_python学习笔记6:命令行参数

1. 使用步骤

使用步骤如下:

# 导入模块

import argparse

# 获取parser, description文本会显示在help信息中

parser = argparse.ArgumentParser(description='args discrip')

# 添加选项, 具体选项类型见后面各节

parser.add_argument('-a')

# 解析选项

args = parser.parse_args(sys.argv[1:])

# 使用选项

print(args.a)

对sys.argv[1:]的说明:

sys.argv # 一个列表,存储命令行参数.

sys.argv[0] # 脚本名.

sys.argv[1:] # 命令行参数.

sys.argv[1][2:] # 截取第一个参数第2bit之后的内容;

2. 位置参数

# 位置参数可以实现类似于vcs a.v b.v的选项处理,

# 如下例, vfiles是位置参数,不需要使用'-vfile 或者-xx'这种形式指定选项内容;

# default=[] 表示默认参数为空list;

# nargs='*' 表示可以是0个或多个参数;

>>> parser.add_argument('vfiles', type=str,default=[], nargs='*')

_StoreAction(optine_strings=[], dest='vfiles', nargs='*', const=None, default=[], Type=, choices=None, help=None, metavar=None)

3. flag类型的选项(选项本身无参数)

flag类型选项本身无参数, 根据"命令行是否有该选项" 和 "该选项声明值/默认值" 来决定选项实际值(注意, 并不是声明选项, 则该选项为True, 不声明为False, 而是内部可配置):

>>> parser.add_argument(

... '-a', # 选项名称

... action='store_true', # 如果声明-a, 则a=True;

... default=False # 如果不声明-a, 则(默认)a=False;

... )

_StoreTrueAction(optine_strings=['-a'], dest='a', nargs=0, const=True, default=False, Type=None, choices=None, help=None, metavar=None)

>>>

>>> parser.add_argument(

... '-b',

... '--b_long_opt', # b有额外的长选项名称: --b_long_opt

... action='store_false', # 如果声明-b, 则b=False

... default=True, # 如果不声明(默认)-b, 则b=True

... dest='b_new_name' # 内部使用b_new_name取用该选项(而不能使用b)

)

_StoreTrueAction(optine_strings=['-b', '--b_long_opt'], dest='b_new_name', nargs=0, const=False, default=True, Type=None, choices=None, help=None, metavar=None)

注意,不会有以下两种情况,因为这两种情况下,无论选项是否定义,内部得到的值都一样,没有意义;

>>> # action='store_true', default=True,声明选项和默认值都是True

>>> # action='store_false', default=False,声明选项和默认值都是False

通过parse一个内部数组来进行验证,实际使用中是parse真正的命令行数组sys.argv[1:], 注意sys.argv[0]表示的是脚本名称;

测试1:#-a -b都没声明,所以都是default值

>>> lst_args=[]

>>> args = parser.parse_args(lst_args)

>>> args.a # 未声名-a,所以args.a的值为default值False;

False

>>> args.b_new_name # 未声名-b,所以args.b_new_name值为默认值True;

True

>>> args.b # 由于使用了dest, 所以args.b会报错, 只能使用args.b_new_name获取

AttributeError: 'Namespace' object has no sttribute 'b'

测试2:-a -b都声明,所以都是action store值

>>> lst_args=['-ab'] # -a和-b是短选项, 可以合并使用'-ab'表示'-a' '-b'

>>> args = parser.parse_args(lst_args)

>>> args.a # 声名了-a,所以args.a的值为声明值True;

True

>>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;

False

测试3:使用长选项,-a -b都声明,所以都是store值

>>> lst_args=['-a', '--b_long_opt'] # --b_long_opt是长选项, 需要使用双短线('--')进行声明

>>> args = parser.parse_args(lst_args)

>>> args.a # 声名了-a,所以args.a的值为声明值True;

True

>>> args.b_new_name # 声名了-b,所以args.b_new_name值为声明值False;

False

4. 必选选项(选项必须声明, 不声明会报错)

>>> parser.add_argument(

... '-c', # 选项名称

... type=int, # 选项类型是整数

... required=True # 选项是必选选项

)

_StoreAction(optine_strings=['-c'], dest='c', nargs=None, const=None, default=None, Type=, choices=None, help=None, metavar=None)

>>>

>>> # 选项-c必须声明,否则报错:error:the following argument are required:-c

>>> lst_args=['-c', '3']

>>> args = parser.parse_args(lst_args)

>>>

>>> # 选项-c类型为int,所以str '3'传到args.c时,会转类型为int 3;

>>> print(args.c)

3

5. 可选选项,可带默认值

-d 为str类型的可选选项,默认值为'default_d'

-d 为str类型的可选选项,默认值为'default_d'

>>> parser.add_argument(

... '-d', # 选项名

... type = str, # 选项类型

... required = False, # '-d'是可选选项

... default = 'default_d' # '-d'不声明时, 默认值为'default_d'

)

_StoreTrueAction(optine_strings=['-d'], dest='d', nargs=None, const=None, default='default_d', Type=, choices=None, help=None, metavar=None)

>>>

>>> lst_args=['-c', '4', '-d', '5'] # -c 必选, -d 可选

>>> args = parser.parse_args(lst_args)

>>> args.c # 选项-c为必选,类型为int

4

>>> type(args.c)

>>>

>>> args.d # 选项-d为可选,类型为str

'5'

>>> type(args.d)

6. 长选项

>>> parser.add_argument(

... '--e_long_opt' , # 表示长选项

... type=str , #

... required=False , #

... default=[] , #

... nargs='+' , # 表示--e_long_opt这个选项后面可以有多个参数

)

_StoreTrueAction(optine_strings=['--e_long_opt'], dest='e_long_opt', nargs='+', const=None, default=[], Type=, choices=None, help=None, metavar=None)

>>>

>>> # --e_long_opt 带了两个参数 'opt_e0', 'opt_e1'

>>> lst_args=['-c', '4', '--e_long_opt', 'opt_e0', 'opt_e1']

>>>

>>> args = parser.parse_args(lst_args)

>>>

>>> # --e_long_opt的两个参数组成一个list赋值给args.e_long_opt;

>>> args.e_long_opt

['opt_e0', 'opt_e1']

7. 列表选项

nargs='+' 表示当前选项可以有多个参数, 这些参数组成一个list, 例子见上一节.

8. 未知选项

如果sys.argv[1:]中出现了"位置选项123" 或 "命名选项–f 456",但"123" 或"-f"选项没有定义在add_argument()中时,直接使用parser.parse_args()会报告错误:

error: unrecognized arguments: 123 –f 456;

这时需要使用parser.parse_known_args()这个方法(而不是parser.parse_args()这个方法)。

>>> lst_args = ['-a', '123', '-f', '456']

>>> parser.add_argument('-a', action='store_true',default=False)

>>>

>>> args, unknown_args = parser.parse_known_args(lst_args)

>>>

>>> args

Namespace(a=True)

>>> args.a # args得到的值与parser.parse_args()的返回值一致

True

>>>

>>> unknown_args # unknown_args得到的是处理完定义过的args后,剩下的选项;

['123', '-f', '456']

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值