1. 重复接受同一个参数 action='append'
parser.add_argument(
"-a",
"--aimg",
help="tags for img",
action='append', # 这里要选 append
type=str,
default=None
)
读取参数
args = parser.parse_args()
print("args.aimg: {}".format(args.aimg))
输出结果
args.aimg: ['ase', 'dee'] # 结果是一个 list
2. 指定一个参数可以接受的值的数量
来源:https://stackoverflow.com/questions/36166225/using-the-same-option-multiple-times-in-pythons-argparse
parser = argparse.ArgumentParser()
parser.add_argument(
'-i',
'--input',
action='append',
nargs=2, # 这个参数需要2个值
metavar=('url','name'), # 这两个值分别是什么意思
help='help:')
输出帮助信息
In [295]: parser.print_help()
usage: ipython2.7 [-h] [-i url name]
optional arguments:
-h, --help show this help message and exit
-i url name, --input url name
help:
输入和读取结果
In [296]: parser.parse_args('-i one two -i three four'.split())
Out[296]: Namespace(input=[['one', 'two'], ['three', 'four']])
This does not handle the 2 or 3 argument case (though I wrote a patch some time ago for a Python bug/issue that would handle such a range).
How about a separate argument definition with nargs=3 and metavar=('url','name','other')?
The tuple metavar can also be used with nargs='+' and nargs='*'; the 2 strings are used as [-u A [B ...]] or [-u [A [B ...]]].
3. 从字符串解析参数
参考:https://stackoverflow.com/questions/8878478/how-can-i-use-pythons-argparse-with-a-predefined-argument-string
import argparse
import shlex
parser = argparse.ArgumentParser(description='Argparse Test script')
parser.add_argument("param", help='some parameter')
argString = '-vvvv -c "yes" --foo bar --some_flag'
args = parser.parse_args(shlex.split(argString))
一个完整例子
import argparse
parser = argparse.ArgumentParser()
# 指定参数为数字
parser.add_argument(
"-l",
"--limit",
help="download url count",
type=int,
default=-1
)
# 指定参数为字符串
parser.add_argument(
"-i",
"--id",
help="url id, -i 1,5-6,8,7",
type=str,
default=''
)
# 指定参数为 bool
parser.add_argument(
"-P",
action="store_true",
help="prompt",
default=False
)
# 指定参数为无名参数(收集所有不带 - 的参数)
# ⚠️:如果 nargs="+",那么至少需要一个无名参数。
parser.add_argument(
"urls",
nargs='*',
metavar='N',
type=str,
help="url list",
default=''
)
args = parser.parse_args()
# 使用参数
print(args.limit)
print(args.id)
print(args.P == True)
for u in args.urls:
print(u)
参考:https://www.mattzeunert.com/2012/02/12/unnamed-arguments-with-argparse.html