Python的命令行参数解析
程序员文章站
2022-05-03 08:58:59
命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse。下面主要介绍两种解析Python命令行参数的方式。
1. sys....
命令行参数解析在编程语言中基本都会碰到,Python中内置了一个用于命令项选项与参数解析的模块argparse。下面主要介绍两种解析Python命令行参数的方式。
1. sys.argv
解析Python中命令行参数的最传统的方法是通过sys.argv。Demo如下:
#!/usr/env/python python # _*_ coding: utf-8 _*_ import sys param1 = sys.argv[1] param2 = sys.argv[2] print sys.argv print param1 print param2 print type(param1) print type(param2)
测试结果如下:
$ python test.py 1 2 ['test.py', '1', '2'] 1 2
这种方法比较古老,灵活性很差,同时解析出来的参数都是
str类型。但在编写简单脚本,参数较少且固定时比较方便。
2. argparse
2. argparse
argparse模块是Python内置的参数解析模块,使用起来比较简单且功能强大。Demo如下:
#!/usr/env/python python # _*_ coding: utf-8 _*_ import argparse # Create ArgumentParser() object parser = argparse.ArgumentParser() # Add argument parser.add_argument('--train', required=True, help='path to dataset') parser.add_argument('--val', required=True, help='path to dataset') parser.add_argument('--total', type=int, help='number of dataset', default=100) parser.add_argument('--lr', type=float, default=0.01, help='learning rate') # Print usage parser.print_help() # Parse argument args = parser.parse_args() # Print args print args print args.train print type(args.train) print args.val print type(args.val) print args.total print type(args.total) print args.lr print type(args.lr)
测试结果如下:
# Test 1 python test.py --train train_lmdb --val val_lmdb --total 10000 --lr 0.001 usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR] optional arguments: -h, --help show this help message and exit --train TRAIN path to dataset --val VAL path to dataset --total TOTAL number of dataset --lr LR learning rate Namespace(lr=0.001, total=10000, train='train_lmdb', val='val_lmdb') train_lmdb val_lmdb 10000 0.001 # Test 2 python test.py --train train_lmdb --val val_lmdb usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR] optional arguments: -h, --help show this help message and exit --train TRAIN path to dataset --val VAL path to dataset --total TOTAL number of dataset --lr LR learning rate Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb') train_lmdb val_lmdb 100 0.01 # Test 3 python test.py --val val_lmdb --train train_lmdb usage: test.py [-h] --train TRAIN --val VAL [--total TOTAL] [--lr LR] optional arguments: -h, --help show this help message and exit --train TRAIN path to dataset --val VAL path to dataset --total TOTAL number of dataset --lr LR learning rate Namespace(lr=0.01, total=100, train='train_lmdb', val='val_lmdb') train_lmdb val_lmdb 100 0.01
ArgumentParser类创建时的参数如下:
prog - 程序的名字(默认:sys.argv[0]) usage - 描述程序用法的字符串(默认:从解析器的参数生成) description - 参数帮助信息之前的文本(默认:空) epilog - 参数帮助信息之后的文本(默认:空) parents - ArgumentParser 对象的一个列表,这些对象的参数应该包括进去 formatter_class - 定制化帮助信息的类 prefix_chars - 可选参数的前缀字符集(默认:‘-‘) fromfile_prefix_chars - 额外的参数应该读取的文件的前缀字符集(默认:None) argument_default - 参数的全局默认值(默认:None) conflict_handler - 解决冲突的可选参数的策略(通常没有必要) add_help - 给解析器添加-h/–help 选项(默认:True)
add_argument函数的参数如下:
name or flags - 选项字符串的名字或者列表,例如foo 或者-f, –foo。 action - 在命令行遇到该参数时采取的基本动作类型。 nargs - 应该读取的命令行参数数目。 const - 某些action和nargs选项要求的常数值。 default - 如果命令行中没有出现该参数时的默认值。 type - 命令行参数应该被转换成的类型。 choices - 参数可允许的值的一个容器。 required - 该命令行选项是否可以省略(只针对可选参数)。 help - 参数的简短描述。 metavar - 参数在帮助信息中的名字。 dest - 给parse_args()返回的对象要添加的属性名称。