目录
一、使用到的具体函数
需要 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