首先,如果您有一些可以省略的参数,那么这些参数应该是选项而不是真正的参数。
Python 提供了不止一种解析参数的方法。最好的选择是argparse
,它具有大量功能,并且是继续开发的模块。如果您必须支持“旧”版本的 python,那么您可能会对 感兴趣optparse
,即使它在 python3.2 中已被弃用。还有一个getopt
模仿 C 的 getopt 的模块(不要使用它!出于历史原因,它还有更多用于帮助人们使用这些旧式解析)
一个简单的例子argparse
可能是:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--option-name', action='store', dest='option_name_var')
parser.add_argument('numbers', type=int, nargs='*')
parsed = parser.parse_args() #parses sys.argv by default
print(parsed.numbers)
print(parsed.option_name_var)
可以用作:
$python example.py 1 2 3
[1, 2, 3]
None
$python example.py 1 2 3 --option-name "value"
[1, 2, 3]
value
$python example.py 1 2 3 --option-name
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument --option-name: expected one argument
$python example.py --option-name
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument --option-name: expected one argument
$python example.py --option-name 5
[]
5
$python example.py 1 2 "string"
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument numbers: invalid int value: 'string'
请注意数字如何自动转换为整数列表,如果值不是整数或缺少参数等,则会发出错误。
您还有一个默认帮助文本:
$python example.py -h
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
positional arguments:
numbers
optional arguments:
-h, --help show this help message and exit
--option-name OPTION_NAME_VAR