【发布时间】:2020-06-18 16:02:52
【问题描述】:
import os
from netaddr import *
import sys
import socket
from pprint import pprint
from collections import defaultdict
import itertools
import bisect
ip_list = []
server_list = []
while True:
try:
server = (input('> '))
if server == 'q':
break
ip_addr = socket.gethostbyname(server)
except socket.gaierror:
print(server, 'can\'t find server/ip', '\n')
ip_list.append(ip_addr)
server_list.append(server)
print(ip_list)
输出(在这种情况下我输入 2 个服务器并返回 2 个 IP):
['10.0.0.1', '10.0.0.2']
现在,当我将该列表插入到脚本的总体用途中时,它会打印出两次列表。 为简单起见,“网络”会拉出子网/路由列表,但我将忽略该代码,因为它与手头的问题无关。
for ip_address in ip_list:
if IPAddress(ip_address) in IPNetwork(network):
print(ip_address)
输出:
10.0.0.1
10.0.0.2
10.0.0.1
10.0.0.2
如何使地址打印一次而不是两次?
【问题讨论】:
-
将打印移出循环。
-
什么是 IPAddress 和 IPNetwork ?上课?
-
@OlvinRoght 将打印移出循环是什么意思?如果这样做,我会收到缩进错误。
-
您是否打算将无法找到的服务器添加到列表中?你在
try之外有ip_list.append(ip_addr),所以即使出现错误也会完成。 -
所以我发现我在输出中有两个条目,因为 10.0.0.1 和 10.0.0.2 返回并打印出默认路由 @ 0.0.0.0/0 并且它们还返回路由 10.0.0.0 /24。我想知道我如何能够排除默认路由而不必每次都排除它,因为 0.0.0.0/0 将适用的边缘情况
标签: python list networking printing