我有以下内容
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)
,我也会遇到同样的错误。
参数的默认操作是
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()
如果您在 cli 上使用参数
-l
,则需要指定一个参数,例如:
python macc.py -l something
如果您在
default = 1
参数上设置 -l
,您可以运行脚本而无需像这样使用它:
python macc.py
您可以通过设置默认值并设置
nargs='?'
来解决此问题。
如果
-l
之后未提供任何内容,则为参数保存默认值。它看起来像这样:
parser.add_argument('-l', '--list', help='Lists MAC Addresses', default=1, nargs='?')