是否可以根据带有 argparse 的正则表达式来区分参数?
我希望我的脚本接受 IP 地址或网络地址,但需要能够区分这两者,因为后端 API 调用需要我指定使用哪个地址。 我最好不要使用显式标志来指定使用哪个参数,而是使用正则表达式,但不确定这是否可能?
示例用法:
ip-lookup.py 192.168.1.1
192.168.1.1 应该分配给名为“ip”的参数
ip-lookup.py 192.168.0.0/16
ip-lookup.py 192.168.0.0 255.255.0.0
ip-lookup.py 192.168.0.0/255.255.0.0
192.168.0.0/16 应该分配给名为“network”的参数
代码:
parser = argparse.ArgumentParser(description='Lookup an IP address or network in the backend IPAM system.')
parser.add_argument('ip', help='IP host address', type=str, required=False, **regex to match on IP address**)
parser.add_argument('network', help='IP network address', type=str, required=False, **regex to match on IP network**)
args = parser.parse_args()
args.ip -> should only exist if the user entered an IP address as parameter
args.network -> should only exist if the user entered an IP network as parameter
请您参考如下方法:
我会通过定义非位置参数(定义时在它们前面的 -- )来解决这个问题。例如
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--ip', help='IP host address', type=str, required=False)
parser.add_argument('--network', help='IP network address', type=str, required=False)
args = parser.parse_args()
print(getattr(args, 'ip'))
print(getattr(args, 'network'))
现在您可以使用 test.py --ip 192.168.1.1 或 test.py --network 192.168.0.0/255.255.0.0 调用它。这将分别返回:
192.168.1.1
None
或
None
192.168.1.1/255.255.0.0
请注意,如果字符串包含空格,则需要 --network '192.168.1.1 255.255.0.0'。
