python 命令行参数 argparse用法总结

目录

一、使用到的具体函数

二、程序用法说明

三、位置参数 positional arguments

四、可选参数 optional arguments

五、类型

六、可选值

七、互斥参数

八、参数默认值


一、使用到的具体函数

需要 python 库 argparse,命令行。

pip install argparse
# 创建解析对象
parser = argparse.ArgumentParser(description="tell others what you want!")

# 添加命令
parser.add_argument(...)

# 解析命令
args = parser.parse_args()

二、程序用法说明

该部分是在创建的时候对程序输入进行解释,告诉命令行用户,如何传入参数。其中参数description 传入的字符串就是参数的解释。可以通过-h进行提示。

import argparse

parser = argparse.ArgumentParser(description="hello world!")
args = parser.parse_args()

命令行操作:将上述代码存入 test1.py 中,进入到test1.py所在文件夹内

python test1.py -h

命令行输出:

usage: test1.py [-h]

hello world!

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

三、位置参数 positional arguments

定义一个参数,不用在参数前面加上'-',必写。而且传入的参数全部都是str类型。

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("x")

args = parser.parse_args()

# 通过解析对象调用添加的参数"x"
print (args.x)

命令行操作:

python test1.py 797

python test1.py hello

命令行输出:

797

hello

四、可选参数 optional arguments

  •  -  短参数,例如 -h
  •  -- 长参数,例如 --help

解析之后调用,要注意是使用长参数。

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("-v", "--verbosity", help="add output verbosity")

args = parser.parse_args()

print (args.verbosity)

该代码中解析对象args调用参数,不能用args.v,要用args.verbosity。

命令行操作:

python test1.py -v world

命令行输出:

world

其次如果我们想给 一个短参数指定参数,需要使用add_argument函数中的参数,action="store_true"

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("-v", "--verbosity", help="add output verbosity")
parser.add_argument("-w", "--weight", action="store_true")

args = parser.parse_args()

print (args.verbosity)
if args.weight:
    print ("weight has been given!")
else:
    print ("weight has not been given!")

命令行操作:

python test1.py -v fuck -w
python test1.py -v fuck

命令行输出:

fuck
weight has been given!
fuck
weight has not been given!

五、类型

因为默认的参数类型是str类型,如果需要进行数字的计算,那么将在参数解析后进行参数的类型转换,如果不能转换将会报错。

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("x", type=int)
parser.add_argument("-y", "--param_y", type=float)

args = parser.parse_args()

print (2 ** args.x, args.param_y * 2)

命令行操作:

python test1.py 5 -y 4.5

命令行输出:

32 9.0

六、可选值

比如输入一个参数的取值范围为[1, 2, 3]输入其他的就会报错

比如输入一个字符串["hello", "world", "fuck"]输入其他的字符串就会报错

下面代码中设置,-v的取值只能是1, 2, 3中的一个。

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("-v", "--verbosity", type=int,choices=[1, 2, 3], help="add output verbosity")

args = parser.parse_args()

print (2 ** args.verbosity)

命令行操作:

python test1.py -v 3
python test1.py -v 5

命令行输出:

8
usage: test1.py [-h] [-v {1,2,3}]
test1.py: error: argument -v/--verbosity: invalid choice: 5 (choose from 1, 2, 3)

补充例子:

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("-v", "--verbosity", choices=["hello", "world", "fuck"], help="add output verbosity")

args = parser.parse_args()

print (args.verbosity)

命令行操作:

python test1.py -v hello
python test1.py -v fuckyou

命令行输出:

hello
usage: test1.py [-h] [-v {hello,world,fuck}]
test1.py: error: argument -v/--verbosity: invalid choice: 'fuckyou' (choose from 'hello', 'world', 'fuck')

七、互斥参数

创建一个互斥组,通过add_mutually_exclusive_group()

import argparse

parser = argparse.ArgumentParser(description="hello world!")

group = parser.add_mutually_exclusive_group()
group.add_argument("-v", "--verbosity", action="store_true")
group.add_argument("-p", "--provement", action="store_true")

args = parser.parse_args()

if args.verbosity and args.provement:
    print ("same time appear!")
else:
    print ("not same time appear!")

命令行操作:

python test1.py -v
python test1.py -v -p

命令行输出:

not same time appear!
usage: test1.py [-h] [-v | -p]
test1.py: error: argument -p/--provement: not allowed with argument -v/--verbosity

八、参数默认值

import argparse

parser = argparse.ArgumentParser(description="hello world!")

parser.add_argument("x", type=int) # 不存在默认参数,必须要传参
parser.add_argument("-v", "--verbosity", type=int, default=5)

args = parser.parse_args()

print (args.x * args.verbosity)

命令行操作:

没有使用默认参数

python test1.py 6 -v 7

使用默认参数

python test1.py 6

命令行输出:

42
30
发布了331 篇原创文章 · 获赞 135 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Triple_WDF/article/details/103576800
今日推荐