我有以下
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")
Run Code Online (Sandbox Code Playgroud)
使用python macc.py -l它运行时出现错误,提示需要参数。即使我将代码更改parser.add_argument('-l', '--list', help='Lists MAC Addresses' default=1)为相同的错误。
che*_*ner 16
参数的默认操作是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()
Run Code Online (Sandbox Code Playgroud)
该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()
Run Code Online (Sandbox Code Playgroud)