我有一个脚本可以从路由器中清除IP列表。最终输出应如下所示:
if net ~ [
12.5.161.0/24,
12.9.242.0/24,
12.11.215.0/24,
12.17.239.0/24,
.... etc etc
216.248.237.0/24,
216.248.238.0/24,
216.248.239.0/24,
216.251.224.0/19,
216.253.79.0/24
] then {
accept;
} else {
reject;
}
我已经达到了能够以正确格式获取IP列表的程度,即
12.5.161.0/24,
12.9.242.0/24,
12.11.215.0/24,
12.17.239.0/24,
.... etc etc
216.248.237.0/24,
216.248.238.0/24,
216.248.239.0/24,
216.251.224.0/19,
216.253.79.0/24
我遇到的prb将开头的str与所有IP串在一起,中间是一个批次,最后是4行str。
到目前为止,我有:
routes = get_bird_routes(args.s)
prefixes = parse_routes(routes, args.p)
dropped = drop_prefixes(prefixes, args.d)
for p in dropped:
lines = [ "if net ~ [", str(p), "] then {", " accept;", "} else {", " reject;", "}\n" ]
print "\n".join(lines)
但是这给了我
if net ~ [
199.89.247.0/24
] then {
accept;
} else {
reject;
}
if net ~ [
192.149.228.0/24
] then {
accept;
} else {
reject;
}
if net ~ [
206.180.165.0/24
] then {
accept;
} else {
reject;
}
而不是我所有的IP在一起,而str只在乞讨和结束时。我试着看看是什么类型(p)(在我把它设置为str(p)之前)它回来了unicode。看看这份文件,我没有清楚地了解我做错了什么。对于蟒蛇仍然是新的,任何帮助都赞赏!!
答案 0 :(得分:0)
您应该加入dropped
,而不是循环播放。
dropped_lines = ",\n".join(dropped)
lines = [ "if net ~ [", dropped_lines, "] then {", " accept;", "} else {", " reject;", "}\n" ]
print "\n".join(lines)
答案 1 :(得分:0)
尝试将您的列表转换为包含str()
和join()
的字符串。然后将一个字符串合并到您的逻辑语句(字符串)中.format()
。
即:
dropped_as_strs = map(str, dropped) # "a", "b", "c"
dropped_str = ',\n'.join(dropped_as_strs) # "a,\nb,\nc"
logic = "if net ~ [\n{}\n] then {{\n accept;\n}} ..."
result = logic.format(dropped_str)
(请注意,需要在str.format()
次调用中加倍“{”和“}”。)