Python 如果提供了可选参数,则需要命令行参数

Python 如果提供了可选参数,则需要命令行参数,python,command-line-arguments,argparse,optional-arguments,Python,Command Line Arguments,Argparse,Optional Arguments,我正在尝试编写一个脚本,用户可以在其中从三个不同选项中进行选择: 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 
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
设置预期参数的数量

请注意,此处显示的帮助显示了
-b 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

有关这方面的更多信息,请参见此处:

您在
-b
操作
例程中强制执行额外参数

在这里,您将检查所需的
数据参数的存在性和有效性。

仅就存在而言,只需简单地检查参数的数量就可以了。

谢谢!如果我需要arg1,但允许arg2是可选的,该怎么办?@gravytrain您可以使用
nargs='+'
,如果至少没有提供一个参数,它将出错,它允许您提供多个参数并将所有参数打包到一个列表中。更多信息请点击此处:。您可以使用另一位回答者建议的
操作
进行进一步的定制,如果您正在执行复杂的命令行解析,我建议您这样做。
>>> 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