Python命令行参数解析sys和argparse
对于Python,通常有三种方法来解析命令行输入的参数:sys.argv
, argparse
,getopt
。我认为sys.argv
用于解析简单的脚本,而argparse
用于解析复杂的项目,在这里整理一下sys.argv
和argparse
库如何解析命令行的输入。getopt
并没有深入了解过。
方法
1. sys.argv
非常简单,接下来先给个示例。
# test.py
import sys
if __name__ =='__main__':
print(sys.argv)
在命令行运行该文件
$ python test.py 123 Peter 22 male
['test.py', '123', 'Peter', '22', 'male']
结论:包括py
程序名在内,所有的参数都会被读取进一个list
。
特点:
- 代码简单,所有参数都在这个字符串组成的
list
中,根据list
中的索引来解析即可,适合简单的脚本。 - 如果说你有10个超参,这次运行你只想修改其中的一个看看效果,你还是得在命令行输入10个参数。
2. argparse
同样,先给个示例。
# test.py
import argparse
if __name__ =='__main__':
parser = argparse.ArgumentParser("CNN模型")
parser.add_argument('--learning_rate', default=0.001, type=float,
help="初始学习率")
parser.add_argument('--epoch', default=30, type=int,
help="训练周期数")
parser.add_argument('--gpu', default='5', type=str,
help="gpu编号")
args = parser.parse_args()
print(args.learning_rate, type(args.learning_rate))
print(args.epoch, type(args.epoch))
print(args.gpu, type(args.gpu))
在命令行运行该文件
$ python test.py --learning_rate=0.01 --gpu=1
0.01 <class 'float'>
30 <class 'int'>
1 <class 'str'>
特点:
- 可具体设置的解析器,包括类型,默认值等。
- 可包含参数的文本解释
- 在命令行中只需填写和默认值不同的参数。
参考
https://docs.python.org/3/library/argparse.html