python argparse module

python 命令行解析模块

基础

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

# 打印命名空间
print(args)

# 打印参数空间中的变量
print(args.integers)

# 打印使用方法
parser.print_usage()

# 打印使用帮助说明(此处会打印出使用方法)
parser.print_help()
1
2
3
4
5
6
7
8
9
10
11
E:\Python37>python ts_cmd.py "command line"
Namespace(echo='command line')
command line
usage: ts_cmd.py [-h] echo
usage: ts_cmd.py [-h] echo

positional arguments:
echo

optional arguments:
-h, --help show this help message and exit

位置参数介绍

1
2
3
4
5
6
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args = parser.parse_args()
print(args.square**2)

以下是该代码的运行结果:

1
2
3
4
5
$ python3 prog.py 4
16
$ python3 prog.py four
usage: prog.py [-h] square
prog.py: error: argument square: invalid int value: 'four'

可选参数介绍

1
2
3
4
5
6
7
8
# prog.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity")
args = parser.parse_args()
if args.verbosity:
print "verbosity turned on"

输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ python3 prog.py --verbosity 1
verbosity turned on
$ python3 prog.py
$ python3 prog.py --help
usage: prog.py [-h] [--verbosity VERBOSITY]

optional arguments:
-h, --help show this help message and exit
--verbosity VERBOSITY
increase output verbosity
$ python3 prog.py --verbosity
usage: prog.py [-h] [--verbosity VERBOSITY]
prog.py: error: argument --verbosity: expected one argument

不指定参数值,让其为默认设置的 bool 值,使用 action=’store_true’ 可以实现

1
2
3
4
5
6
7
import argparse


parser = argparse.ArgumentParser()
parser.add_argument("-v", "--verbosity", help="increase output verbosity", action="store_true")
args = parser.parse_args()
print args.verbosity

类及方法说明

class ArgumentParser(…)

1
2
3
4
ArgumentParser(prog=None, usage=None, description=None, epilog=None, parents=[], 
formatter_class=<class 'argparse.HelpFormatter'>, prefix_chars='-',
fromfile_prefix_chars=None, argument_default=None, conflict_handler='error',
add_help=True, allow_abbrev=True)

参数说明

1
2
3
4
5
6
7
8
9
10
11
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)

def add_argument(self, args, *kwargs)

1
2
3
4
5
6
add_argument(*args, **kwargs) method of argparse.ArgumentParser instance
add_argument(dest, ..., name=value, ...)
add_argument(option_string, option_string, ..., name=value, ...)

# python2.7 定义
ArgumentParser.add_argument(name or flags...[, action][, nargs][, const][, default][, type][, choices][, required][, help][, metavar][, dest])

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
name or flags - 选项字符串的名字或者列表,例如foo 或者-f, --foo。
action - 在命令行遇到该参数时采取的基本动作类型。
-- store
-- store_const
-- store_true
-- store_false
-- append
-- append_const
-- count
-- help
-- version
-- extend
nargs - 应该读取的命令行参数数目。
const - 某些action和nargs选项要求的常数值。
default - 如果命令行中没有出现该参数时的默认值。
type - 命令行参数应该被转换成的类型。
choices - 参数可允许的值的一个容器。
required - 该命令行选项是否可以省略(只针对可选参数)。
help - 参数的简短描述。
metavar - 参数在帮助信息中的名字。
dest - 给parse_args()返回的对象要添加的属性名称。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# -*- coding: utf-8 -*-

import argparse
import sys
import os


def main(argv):
'''
python3 {0} ls [-r] minio_path minio_path is directory or file or None, [-r] recursive query
python3 {0} get minio_path local_path download minio file or directory to local
python3 {0} put local_path minio_path upload local file or directory to minio
python3 {0} cat minio_path print minio file content, so minio_path is file name
python3 {0} head [-L 10] print minio file content, default show head 10 line
python3 {0} tail [-L 10] print minio file content, default show tail 10 line
'''

command_list = ["ls", "get", "put", "cat", "head", "tail"]

file_name, *args_list = argv
if 1:
pass
else:
print(getattr(globals()[sys._getframe().f_code.co_name], "__doc__").format(file_name))




if __name__ == "__main__":
parser = argparse.ArgumentParser(prog=None,
usage="python %(prog)s [option] ...",
description="simulation minio mc",
epilog="and so on ...",
parents=[],
formatter_class=argparse.HelpFormatter,
prefix_chars='-',
fromfile_prefix_chars=None,
argument_default=None,
conflict_handler='error',
add_help=True,
allow_abbrev=True)
parser.add_argument("-ls", nargs="?", help="show dir or file info", const=os.sep)
parser.add_argument("-r", "--recursion", help="recursion dir", action="store_true")
parser.add_argument("-get", nargs=2, metavar=("d_path", "l_path"),
help="downlod dst file or dir to local")
parser.add_argument("-put", nargs=2, metavar=("l_path", "d_path"),
help="upload local file or dir to dst")
parser.add_argument("-cat", nargs=1, help="print file content")
parser.add_argument("-f", "--format", help="format print content", action="store_true")
parser.add_argument("-L", "--line", help="show print line number", action="store_true")
parser.add_argument("-n", "--number", nargs="?", metavar="n",
help="print line number", default=10,
const=10, type=int)
parser.add_argument("-head", nargs=1, metavar="d_file",
help="print file content, default head 10 line")
parser.add_argument("-tail", nargs=1, metavar="d_file",
help="print file content, default tail 10 line")

args = parser.parse_args()
# print(args)
# print(parser.print_help())

说明文档示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
E:\Python37>python ts_cmd.py -h
usage: python ts_cmd.py [option] ...

simulation minio mc

optional arguments:
-h, --help show this help message and exit
-ls [LS] show dir or file info
-r, --recursion recursion dir
-get d_path l_path downlod dst file or dir to local
-put l_path d_path upload local file or dir to dst
-cat CAT print file content
-f, --format format print content
-L, --line show print line number
-n [n], --number [n] print line number
-head d_file print file content, default head 10 line
-tail d_file print file content, default tail 10 line

and so on ...

参考

https://docs.python.org/zh-cn/dev/library/argparse.html

Python 命令行工具 argparse 模块使用详解

PYTHON中argparse的用法

python argparse(参数解析)模块学习(二)

-------------本文结束感谢您的阅读-------------