Argparse 需要一个参数

问题描述 投票:0回答:3

我有以下内容

import argparse

parser = argparse.ArgumentParser(prog='macc', usage='macc [options] [address]')
parser.add_argument('-l', '--list', help='Lists MAC Addresses')
args = parser.parse_args()
print(args)

def list_macs():
  print("Found the following MAC Addresses")

使用

python macc.py -l
运行时出现错误,它表示需要一个参数。即使我将代码更改为
parser.add_argument('-l', '--list', help='Lists MAC Addresses' default=1)
,我也会遇到同样的错误。

python argparse
3个回答
34
投票

参数的默认操作是

store
,它使用下一个命令行参数设置
parser.parse_args
返回的命名空间中的属性值。

您不想存储任何特定值;您只是想确认使用了

-l
。快速破解方法是使用
store_true
操作(将
args.list
设置为
True
)。

parser = argparse.ArgumentParser(prog='macc')
parser.add_argument('-l', '--list', action='store_true', help='Lists MAC Addresses')

args = parser.parse_args()

if args.list:
    list_macs()

store_true
动作也意味着
type=bool
default=False


但是,一种稍微简洁的方法是定义一个名为

list
的子命令。通过这种方法,您的调用将是
macc.py list
而不是
macc.py --list

parser = argparse.ArgumentParser(prog='macc')
subparsers = parser.add_subparsers(dest='cmd_name')
subparsers.add_parser('list')

args = parser.parse_args()

if args.cmd_name == "list":
    list_macs()

2
投票

如果您在 cli 上使用参数

-l
,则需要指定一个参数,例如:

python macc.py -l something

如果您在

default = 1
参数上设置
-l
,您可以运行脚本而无需像这样使用它:

python macc.py

0
投票

您可以通过设置默认值并设置

nargs='?'
来解决此问题。

如果

-l
之后未提供任何内容,则为参数保存默认值。它看起来像这样:

parser.add_argument('-l', '--list', help='Lists MAC Addresses', default=1, nargs='?')

更多信息:https://docs.python.org/3/library/argparse.html#nargs

© www.soinside.com 2019 - 2024. All rights reserved.