N sys.argv [1:] args带有可选的args XOR 1 argparse arg,带有1个可选的arg?

时间:2013-02-27 17:24:21

标签: python command-line-arguments argparse

如果设置了--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()

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你需要进行一些后期处理,因为在运行时你不会知道允许多少位置参数。

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}}是来自--mac还是--nonmac