Argparse 需要一个参数

Jor*_*ron 8 python argparse

我有以下

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.listTrue)。

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=booldefault=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)