如果提供了可选参数,则需要命令行参数
Requiring a command line argument if an optional argument is provided
我正在尝试编写一个脚本,用户可以在其中选择三个不同的选项:
python foo.py
python foo.py -a
python foo.py -b address_arg data_arg
如果用户选择最后一个选项,我需要他们为地址和数据提供两个附加参数。
我目前正在使用它,因此它需要一个参数,比如这里的地址:
parser.add_argument('-b', '--boo', dest='address', type=str, help="Help message")
如果我 运行
python foo.py -b 0x00
但是我如何要求用户提供数据的第二个参数?
您可以使用 nargs=2
设置预期参数的数量。
https://docs.python.org/3/library/argparse.html#the-add-argument-method
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-b', '--bar', nargs=2)
_StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['--bar', 'arg1', 'arg2'])
>>> args.bar
['arg1', 'arg2']
>>> args = parser.parse_args(['--bar', 'arg1'])
usage: [-h] [-b BAR BAR]
: error: argument -b/--bar: expected 2 arguments
请注意,此处显示的帮助显示 -b BAR BAR
,这有点烦人(默认情况下会重复参数名称)。您可以将 metavar
设置为一个元组,以便为您需要传递的两个参数显示更好的帮助消息。
>>> parser.add_argument('-f', '--foo', nargs=2, metavar=('desc1', 'desc2'))
_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=('desc1', 'desc2'))
>>> parser.print_help()
usage: [-h] [-b BAR BAR] [-f desc1 desc2]
optional arguments:
-h, --help show this help message and exit
-b BAR BAR, --bar BAR BAR
-f desc1 desc2, --foo desc1 desc2
有关更多信息,请参见此处:https://docs.python.org/3/library/argparse.html#metavar
您在 action
例程中强制执行 -b
的额外参数。
在那里,您检查您期望的 data_arg
是否存在和有效性。
对于单独的存在,简单地检查参数的数量就可以完成这项工作。
我正在尝试编写一个脚本,用户可以在其中选择三个不同的选项:
python foo.py
python foo.py -a
python foo.py -b address_arg data_arg
如果用户选择最后一个选项,我需要他们为地址和数据提供两个附加参数。
我目前正在使用它,因此它需要一个参数,比如这里的地址:
parser.add_argument('-b', '--boo', dest='address', type=str, help="Help message")
如果我 运行
python foo.py -b 0x00
但是我如何要求用户提供数据的第二个参数?
您可以使用 nargs=2
设置预期参数的数量。
https://docs.python.org/3/library/argparse.html#the-add-argument-method
>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('-b', '--bar', nargs=2)
_StoreAction(option_strings=['-b', '--bar'], dest='bar', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=None)
>>> args = parser.parse_args(['--bar', 'arg1', 'arg2'])
>>> args.bar
['arg1', 'arg2']
>>> args = parser.parse_args(['--bar', 'arg1'])
usage: [-h] [-b BAR BAR]
: error: argument -b/--bar: expected 2 arguments
请注意,此处显示的帮助显示 -b BAR BAR
,这有点烦人(默认情况下会重复参数名称)。您可以将 metavar
设置为一个元组,以便为您需要传递的两个参数显示更好的帮助消息。
>>> parser.add_argument('-f', '--foo', nargs=2, metavar=('desc1', 'desc2'))
_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=2, const=None, default=None, type=None, choices=None, help=None, metavar=('desc1', 'desc2'))
>>> parser.print_help()
usage: [-h] [-b BAR BAR] [-f desc1 desc2]
optional arguments:
-h, --help show this help message and exit
-b BAR BAR, --bar BAR BAR
-f desc1 desc2, --foo desc1 desc2
有关更多信息,请参见此处:https://docs.python.org/3/library/argparse.html#metavar
您在 action
例程中强制执行 -b
的额外参数。
在那里,您检查您期望的 data_arg
是否存在和有效性。
对于单独的存在,简单地检查参数的数量就可以完成这项工作。