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