python getopt argparse_Python命令行参数解析:getopt和argparse

本文介绍了Python中参数传递的三种方式:sys.argv的基本用法,getopt模块解析带格式参数,以及argparse模块的高级功能。通过实例演示了如何获取和处理命令行参数,包括短选项和长选项,以及自定义帮助文档。
摘要由CSDN通过智能技术生成

一 Python的参数传递

在Python中命令行参数通过sys.argv传递,它的类型是一个list类型,其中的元素为字符串。

# -*-coding:GBK-*-

# !python.exe

# 这是一个测试sys.argv的脚本

import sys

if __name__ == '__main__':

print u"命令行参数为:"

print sys.argv

例1-1 打印传入的脚本参数

如不输入任何参数执行脚本,那么它仅有一个元素为脚本的全路径,结果如下:

命令行参数为:

['E:/py/Jenkins-KaiJia/test_args.py']

输入参数为-a param_a --b="param_b with space" -c时,输出的结果为:

命令行参数为:

['E:/py/Jenkins-KaiJia/test_args.py', '-a', 'param_a', '--b=param_b with space', '-c']

二 通过getopt解析Python传入的参数

当我们需要获取例1-1中需要的-a参数指定的值param_a,-b参数指定的"param_b with space"时,可以使用python自带的getopt模块获取。它能解析带'-'和'--'格式的参数。它的函数原型为:

getopt.getopt(args,options[,long_options])

其中第一个参数args为需要解析的命令行参数列表。一般为sys.argv[1:],这是因为argv[0]为脚本的路径。第二个参数options为希望识别的参数,如果该命令行参数需要指定一个参数值,如例1-1中的-a param_a,那么它必须跟一个冒号":",即"a:",再加上例1-1中不需要指定参数值的c即为:"a:c"或者"ca:"。

使用长格式的命令行参数,例如"--b=param_b"时,需要在参数3中指定它。参数3是一个list指定了那些需要识别的长格式的参数。在例1-1中--b参数需要在getopt的参数3中指定。格式为["b="](注意它是一个列表),如果有多个,假设还有参数--d=x,--e=y,--f=z需要解析那么需要在列表中一一指定,如:["b=","d=","e="]。

返回值包含两个值,第一个值即已识别的-a --b -c这些参数及其值的键值对(option,value)。

示例如下:

# -*-coding:utf-8 -*-

# !python.exe

# 这是一个测试getopt.getopt的脚本

import sys,getopt

if __name__ == "__main__":

try:

opts, args = getopt.getopt(sys.argv[1:],"a:cd:",["b="])

for opt, arg in opts:

if "-a" == opt:

print u'a参数已经指定,值为:' + arg

elif "--b" == opt:

print u'b参数已经指定,值为' + arg

elif '-c' == opt:

print u'c参数已经指定,值为:' + arg

elif '-d' == opt:

print u'd参数已经指定,值为:' + arg

except getopt.GetoptError ,e:

print u'参数解析发生了错误:' + e.msg

sys.exit(1)

例2-1 使用getopt.getopt解析命令行参数

当输入为-a param_a --b="param_b with space" -c -d dx时,结果为:

a参数已经指定,值为:param_a

b参数已经指定,值为param_b with space

c参数已经指定,值为:

d参数已经指定,值为:dx

三 使用argparse解析命令行参数

argparse是一个可以自动生成使用帮助的python模块。

# -*-coding:utf-8 -*-

# !python.exe

# 这是一个测试argparse的脚本

import argparse

if __name__ == "__main__":

parser = argparse.ArgumentParser(description="show example")

parser.add_argument("-a", "--param_a", help="help of param_a")

parser.add_argument("-b", "--param_b", help="help of param_b", action="store_true")

exptypegroup = parser.add_mutually_exclusive_group()

exptypegroup.add_argument("-r", "--remote", help="remote mode", action="store_true")

exptypegroup.add_argument("-l", "--local", help="local mode", action="store_true")

ARGS = parser.parse_args()

if ARGS.param_a:

print u"设置了param_a值为:" + ARGS.param_a

if ARGS.param_b:

print u"设置了param_b值为:" + str(ARGS.param_b)

例3-1 使用argparse解析命令行参数

parser = argparse.ArgumentParser(description="show example")

这一行是argparse的构造函数,当其中description参数指定了当用户敲入-h时显示的模块介绍。

parser.add_argument("-a", "--param_a", help="help of param_a")这个函数用于添加可解析的参数,其中action=store_true的意义是如果使用了这个参数则值默认为TRUE。

exptypegroup = parser.add_mutually_exclusive_group()这个函数添加一组互斥的选项,如上例中的-l和-r只能用一个。

argparse自带-h参数解析,在使用命令行参数-h运行上例脚本时,展示如下:

usage: test_argparse [-h] [-a PARAM_A] [-b] [-r | -l]

show example

optional arguments:

-h, --help            show this help message and exit

-a PARAM_A, --param_a PARAM_A

help of param_a

-b, --param_b         help of param_b

-r, --remote          remote mode

-l, --local           local mode

当使用-a avalue -b -l时结果如下:

设置了param_a值为:avalue

设置了param_b值为:True

设置了本地模式

当使用-a avalue -b -r -l时的结果:

usage: test_argparse [-h] [-a PARAM_A] [-b] [-r | -l] test_argparse: error: argument -l/--local: not allowed with argument -r/--remote 这是因为-l和-r设置了互斥模式只能选择其一。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值