文章作者:Tyan
博客:noahsnail.com | CSDN | 简书
命令行参数解析在编程语言中基本都会碰到,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
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
<type 'str'>
val_lmdb
<type 'str'>
10000
<type 'int'>
0.001
<type 'float'>
# 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
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>
# 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
<type 'str'>
val_lmdb
<type 'str'>
100
<type 'int'>
0.01
<type 'float'>
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()返回的对象要添加的属性名称。
参考资料: