argparse
模组可以使命令行接口更易于理解与使用。通过程序指定要请求的参数, 而 argparse
将指示如何解析 sys.argv
。 argparse
模组还会提供帮助与使用方法并且在用户给出未提供的参数时发出错误提示 。
Example
下面是一个可以带数个整数,然后计算出它们的和或者最大的值。
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)
将这段代码命名为'prog.py',运行得到了帮助信息:
>$ python prog.py -h
usage: prog.py [-h] [--sum] N [N ...]
Process some integers.
positional arguments:
N an integer for the accumulator
optional arguments:
-h, --help show this help message and exit
--sum sum the integers (default: find the max)
在运行程序时输入的参数如果符合要求,它将打印出和或最大值。
>$ python prog.py 1 2 3 4
4
$ python prog.py 1 2 3 4 --sum
10
如果输入的参数类型不正确,程序将提示一个错误:
>$ python prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'
下面的章节将带你一步步剖解上面的例子
定义一个parser
使用 argparse
的第一步就是创建一个 ArgumentParser
对象:
parser = argparse.ArgumentParser(description='Process some integers.')
ArgumentParser
对象将所有命令行输入的参数解析成Python能够识别的数据,并传入Python程序内部。
Adding arguments
调用add_argument()函数可向ArgumentParser中添加程序运行参数的信息,它们会告诉ArgumentParser如何处理这些字符串,并且将字符串写入对象中,这些信息将在parse_args()运行时被使用。比如:
> 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)')
后面调用parse_args()时将返回一个带有intergers 与 accumulate属性的对象。Integers属性将是一个至少一个整数的数组,而accumulate属性在指定了--sum时将是sum()函数,如果没有指定参数将是max()函数。
解析参数
ArgumentParser通过parse_args()函数解析参数,通过遍历命令行,转换参数到合适的类型,然后调用合适的行动,在大部分情况下,会通过解析命令行而得出一个Namespace对象。
> parser.parse_args(['--sum', '7', '-1', '42'])
Namespace(accumulate=, integers=[7, -1, 42])
In a script, parse_args()
will typically be called with no arguments, and the ArgumentParser
will automatically determine the command-line arguments from sys.argv
.
在一个程序中调用parse_args()时的用法是不需要里面的那些参数的,因为ArgumentParser将会自动从sys.argv中拿到参数。
ArgumentParser 对象
Create a new ArgumentParser
object. All parameters should be passed as keyword arguments. Each parameter has its own more detailed description below, but in short they are:
创造一个ArgumentParse 对象时,所有的参数都应该作为dict中的key value,每一个参数都有很多细节,简要的概括如下:
- prog - The name of the program (default:
sys.argv[0]
) - usage - The string describing the program usage (default: generated from arguments added to parser)
- description - Text to display before the argument help (default: none)
- epilog - Text to display after the argument help (default: none)
- parents - A list of
ArgumentParser
objects whose arguments should also be included - formatter_class - A class for customizing the help output
- prefix_chars - The set of characters that prefix optional arguments (default: ‘-‘)
- fromfile_prefix_chars - The set of characters that prefix files from which additional arguments should be read (default:
None
) - argument_default - The global default value for arguments (default:
None
) - conflict_handler - The strategy for resolving conflicting optionals (usually unnecessary)
- add_help - Add a
-h/--help
option to the parser (default:True
)
The following sections describe how each of these are used.
下面的章节将介绍它们的具体用法。
prog
By default, ArgumentParser
objects use sys.argv[0]
to determine how to display the name of the program in help messages. This default is almost always desirable because it will make the help messages match how the program was invoked on the command line. For example, consider a file named myprogram.py
with the following code:
>import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', help='foo help')
args = parser.parse_args()