前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python:argparse用于命令行参数解析

python:argparse用于命令行参数解析

作者头像
生信菜鸟团
发布2021-12-15 17:54:36
2.6K0
发布2021-12-15 17:54:36
举报
文章被收录于专栏:生信菜鸟团

argparse是python中内置的命令行解析模块,内置于python,导入即可使用。

默认自带帮助

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser()
print(parser.parse_args())

保存为parser-tools.py,命令行运行:

代码语言:javascript
复制
>python parser-tools.py -h
usage: parser-tools.py [-h]

optional arguments:
  -h, --help  show this help message and exit

argparse.ArgumentParser是创建一个参数解析实例,参数description指定帮助中程序的描述信息,prog指定帮助信息中的程序名称,epilog可以指定帮助信息最下面的帮助信息。

add_argument添加参数

参数可以分为位置参数和选项参数:

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-a", "--arg1", "--arg2")
parser.add_argument("-b", type = int, default = 10)
parser.add_argument("c")

print(parser.parse_args())

上例中a和b是选项参数,c是位置参数。区别在于是否以"-"开头,另外可以对一个参数指定多个标识符,所以a参数可以用arg1或者arg2来指定。此时的帮助信息如下:

代码语言:javascript
复制
>python parser-tools.py -h
usage: parser-tools.py [-h] [-a ARG1] [-b B] c

positional arguments:
  c

optional arguments:
  -h, --help            show this help message and exit
  -a ARG1, --arg1 ARG1, --arg2 ARG1
  -b B

type指定参数的类型,可以知道选项参数b是整数类型(默认是字符型)。另外还可以使用default值,当不指定一个参数的时候,参数就会使用此默认值。

代码语言:javascript
复制
>python parser-tools.py --arg2 a-string -b 1 c-string
Namespace(arg1='a-string', b=1, c='c-string')

可以发现,a参数解析为"a-string",b参数解析为用1,c是位置参数,此时指定为"c-string"。

a和b不指定的时候就是使用默认值,如果没有指定default,就会使用default的默认值None:

代码语言:javascript
复制
>python parser-tools.py  1
Namespace(arg1=None, b=10, c='1')

当不指定a和b时,a因为没有指定默认值为None,b使用默认值10。

nargs可以指定一个参数接受多少个数据:

N:一个整数,代表指定的个数;

*:接受任意个参数,包括零个,结果是一个列表;

?:零个或一个;

+:至少一个,否则报错;

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser()

parser.add_argument("-d", nargs="?", const="d const value", default="d default value")
parser.add_argument("-e", action="store_const", const="e const value", default="e default value")
parser.add_argument("-f", nargs="*")

print(parser.parse_args())

由于?代表接受0个或1个参数,当指定了参数但是没有传参数值时,如果此时设置了const值,那么此时就会使用const的值。

代码语言:javascript
复制
>python parser-tools.py -d -f
Namespace(d='d const value', e='e default value', f=[])

可以发现在指定d参数但是不传入具体的参数值时,那么就会使用const的值,e参数由于没有指定,因此使用默认值,f参数时定义的任意个值,由于也没有传值给它,所以是一个空列表。

const在nargs是"?"或者action是”store_const“等值的时候是有用的,比如:

代码语言:javascript
复制
>python parser-tools.py -d -e -f 1 3 str
Namespace(d='d const value', e='e const value', f=['1', '3', 'str'])

可以发现e参数的action就是store_const,结果在指定e参数后,其值就是使用的const值。

action是在接收到命令行参数后如何处理参数值,默认情况下是存储值,比如上例中的f,传入了三个参数1 3 str,解析结果就是储存了一个包含三者的一个列表。

action可以指定如下:

store_const: 当指定了参数后,会将参数的值解析为const的值;

store_true和store_false:和store_const类似,只不过此时const的值自动就是True或者False;

append: 存储为一个列表,当需要多次使用一个参数时,可以使用;

append_const: 存储为一个列表,并将const的值追加到列表中;

count: 统计一个参数的出现次数;

help: 默认情况下,一个打印帮助的h参数已经自动添加;

version: 打印版本号,需要同时指定version的值;

extend:存储为一个列表,并将每个参数加到列表中。

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser()

__VERSION__ = "0.0.1"

parser.add_argument("-v", "--version", action="version", version=__VERSION__)
parser.add_argument("-g", action="append_const", const="const-val")
parser.add_argument("-i", action="count")

print(parser.parse_args())

打印版本号,如下:

代码语言:javascript
复制
>python parser-tools.py -v
0.0.1

如果多次使用一个参数,解析结果如下:

代码语言:javascript
复制
>python parser-tools.py -gg -iii
Namespace(g=['const-val', 'const-val'], i=3)

另外,choices参数指定参数的可选值,required代表必选参数, dest代表参数解析后的变量名。

add_subparsers可以添加子命令

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser(
    description="Test sub commond", 
    prog="Parse-Tools",
    epilog="More help message here..."
)

sub_parser = parser.add_subparsers()

sub_a = sub_parser.add_parser("A")
sub_b = sub_parser.add_parser("B")

sub_a.add_argument("-aa", "--A_Arg")
sub_b.add_argument("-bb", "--B_Arg")

print(parser.parse_args())

add_subparsers返回的parser对象,对其添加子命令A和B,每个子命令可以继续添加argument,结果如下:

代码语言:javascript
复制
# 帮助信息
>python parser-tools.py -h
usage: Parse-Tools [-h] {A,B} ...

Test sub commond

positional arguments:
  {A,B}

optional arguments:
  -h, --help  show this help message and exit

More help message here...

# 子命令A帮助信息
>python parser-tools.py A -h
usage: Parse-Tools A [-h] [-aa A_ARG]

optional arguments:
  -h, --help            show this help message and exit
  -aa A_ARG, --A_Arg A_ARG

# 子命令A
>python parser-tools.py A -aa test
Namespace(A_Arg='test')
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 默认自带帮助
  • add_argument添加参数
  • add_subparsers可以添加子命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档