1

如果--mac argparse设置了参数,我想禁止通过sys.argv. 这可能吗?

我正在编写的脚本应该能够接受N sys.argv[1:]参数,或者(XOR)一个带有位置参数的单个--mac参数,用于查询 MAC 地址。

目前,N sys.argv[1:]正在传递以构造要发送到 REST API 的查询字符串。

我希望能够做到这一点:

if args.mac is not None: do_MAC_operation()
else do_BizBar()

到目前为止我所拥有的:

parser = argparse.ArgumentParser() parser.add_argument("-v" "--verbose", action="store_true", help="verbose output")
group = parser.add_mutually_exclusive_group(required=True) 
group.add_argument("-m", "--mac", action="store_const", const="mac_address" help="search by MAC address") 
args = parser.parse_args()

有什么建议么?

4

1 回答 1

1

您需要进行一些后期处理,因为直到运行时您才会知道允许多少位置参数。

p = ArgumentParser()
p.add_argument("-m", "--mac", action="store_const", const="mac_address")
p.add_argument("addresses", nargs="*")

args = p.parse_args()

if args.mac is not None and len(args.addresses) > 1:
    p.error("Only one argument allowed in conjunction with --mac")

另一种选择是为互斥组创建两个选项,而不是使用位置参数。一个将采用单个参数,另一个可以采用任意数字。

p = argparse.ArgumentParser()
g = p.add_mutually_exclusive_group(required=True) 
g.add_argument("-m", "--mac", dest="addresses")
g.add_argument("--nonmac", nargs="*", dest="addresses")
args = parser.parse_args()

在这里,我让参数处理器处理 mac-vs-nonmac 问题。解析参数后,您将无法判断args.addresses长度为 1 的 a 是否来自--macor --nonmac

于 2013-02-27T18:00:19.417 回答