Python命令行参数解析sys和argparse

Python命令行参数解析sys和argparse

对于Python,通常有三种方法来解析命令行输入的参数:sys.argv, argparse,getopt。我认为sys.argv用于解析简单的脚本,而argparse用于解析复杂的项目,在这里整理一下sys.argvargparse库如何解析命令行的输入。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

你可能感兴趣的:(Python)