add_argument action
#action 默认为 store, 把值存下来
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo')
args = parser.parse_args('--foo 1'.split())
print(args.foo)
1
# store_const 选项出现时, 拿到指定值
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_const', const=42)
args = parser.parse_args(['--foo'])
print(args.foo)
42
# store_true 选项出现时, 拿到True
# store_false 选项出现时,拿到False
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='store_true')
parser.add_argument('--bar', action='store_false')
parser.add_argument('--baz', action='store_false')
args = parser.parse_args('--foo --bar'.split())
print(args.foo, args.bar, args.baz)
True False True
# append 一个选项多次出现 ,加到一个列表里
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--foo', action='append')
args = parser.parse_args('--foo 1 --foo hello'.split())
print(args.foo)
['1', 'hello']
# append_const 选项出现时,把指定值放到列表里
parser = argparse.ArgumentParser()
parser.add_argument('--str', dest='types', action='append_const', const='str')
parser.add_argument('--int', dest='types', action='append_const', const='int')
args = parser.parse_args('--str --int'.split())
print(args.types)
['str', 'int']
# count 统计 选项出现的次数 , 如果不设置default=0,默认值是None
parser = argparse.ArgumentParser()
parser.add_argument('--verbose', '-v', action='count', default=0)
args = parser.parse_args(['-vvv', '-v'])
print(args.verbose)
4
# verion 打印版本,并退出
import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--version', action='version', version='%(prog)s 2.0')
parser.parse_args(['--version'])
PROG 2.0
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
/usr/local/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3339: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
nargs
# 数字表示收集N个参数
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs=2)
parser.add_argument('bar', nargs=1)
print(parser.parse_args('c --foo a b'.split()))
# ? 表示收集一个参数,没有使用默认值
parser = argparse.ArgumentParser()
parser.add_argument('--foo', nargs='?', const='c', default='d')
parser.add_argument('bar', nargs='?', default='d')
print(parser.parse_args(['XX', '--foo', 'YY']))
# * 收集任意多的参数
# + 至少收集一个参数 ,没有报错
# argarse.REMAINDER 剩余的收集起来
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('--foo')
parser.add_argument('command')
parser.add_argument('args', nargs=argparse.REMAINDER)
print(parser.parse_args('--foo B cmd --arg1 XX ZZ'.split()))
Namespace(bar=['c'], foo=['a', 'b'])
Namespace(bar='XX', foo='YY')
Namespace(args=['--arg1', 'XX', 'ZZ'], command='cmd', foo='B')
type
# 默认拿到的是字符串,可通过type指定类型
parser = argparse.ArgumentParser()
parser.add_argument('foo', type=int)
parser.add_argument('bar', type=open)
print(parser.parse_args('2 temp.txt'.split()))
parser = argparse.ArgumentParser()
parser.add_argument('bar', type=argparse.FileType('w'))
print(parser.parse_args(['temp.txt']))
Namespace(bar=<_io.TextIOWrapper name='temp.txt' mode='r' encoding='UTF-8'>, foo=2)
Namespace(bar=<_io.TextIOWrapper name='temp.txt' mode='w' encoding='UTF-8'>)
import math
# type 可以传自定义的函数
def perfect_square(string):
value = int(string)
sqrt = math.sqrt(value)
if sqrt != int(sqrt):
msg = "%r is not a perfect square" % string
raise argparse.ArgumentTypeError(msg)
return value
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('foo', type=perfect_square, help="必须传一个完全平方数")
print(parser.parse_args(['9', '-h']))
# print(parser.parse_args(['7'])) #报错
usage: PROG [-h] foo
positional arguments:
foo 必须传一个完全平方数
optional arguments:
-h, --help show this help message and exit
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
# choice 用于限制选项的取值范围
parser = argparse.ArgumentParser(prog='game.py')
parser.add_argument('move', choices=['rock', 'paper', 'scissors'])
print(parser.parse_args(['rock']))
print('-' * 50)
# require 选项必须给出
parser = argparse.ArgumentParser()
parser.add_argument('--foo', required=True)
print('-' * 50)
# help 显示帮助信息
parser = argparse.ArgumentParser(prog='frobble')
parser.add_argument('--foo', help="foo的帮助信息")
parser.print_help()
print('-' * 50)
#metavar 帮助信息时,参数位置的代称
parser = argparse.ArgumentParser()
parser.add_argument('--foo', metavar='YYY')
parser.add_argument('bar', metavar='XXX')
parser.parse_args('X --foo Y'.split())
parser.print_help()
Namespace(move='rock')
--------------------------------------------------
--------------------------------------------------
usage: frobble [-h] [--foo FOO]
optional arguments:
-h, --help show this help message and exit
--foo FOO foo的帮助信息
--------------------------------------------------
usage: ipykernel_launcher.py [-h] [--foo YYY] XXX
positional arguments:
XXX
optional arguments:
-h, --help show this help message and exit
--foo YYY
dest
# dest是解析后选项参数的名字
# ArgumentParser 会通过接受第一个长选项字符串
# 并去掉开头的 -- 字符串来生成 dest 的值。
# 如果没有提供长选项字符串,则 dest 将通过接受第一个短选项字符串并去掉开头的 - 字符来获得。
# 任何内部的 - 字符都将被转换为 _ 字符以确保字符串是有效的属性名称。
# 下面的例子显示了这种行为:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--foo-bar', '--foo')
parser.add_argument('-x', '-y')
print(parser.parse_args('-f 1 -x 2'.split()))
# 自定义 dest名字
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')
print(parser.parse_args('--foo XXX'.split()))
Namespace(foo_bar='1', x='2')
Namespace(bar='XXX')