0

我正在使用下面的代码将文本文件(hosts.txt)读入列表,然后尝试使用 socket.gethostbyname() 将每个文件解析为它们的 IP

import socket

non_blank_count = 0

with open('hosts.txt') as infp:
    for line in infp:
        non_blank_count += 1

print 'IPs to be resolved %d' % non_blank_count     


with open('hosts.txt') as fp:
    content = fp.readlines()

i=0

while i < non_blank_count:
    print("Host: %s : IP: %s") % (content[i], socket.gethostbyname(content[i]))
    i = i+1

每当我尝试这样做时,我都会收到以下错误消息:

回溯(最后一次调用):文件“test.py”,第 18 行,在 print("Host: %s : IP: %s") % (content[i], socket.gethostbyname(content[i])) socket.gaierror:[Errno 11004] getaddrinfo 失败

如果我使用以下方法从空闲状态尝试它可以正常工作:

>>> import socket
>>> socket.gethostbyname("google.com")
'74.125.237.99'

我认为它与双引号有关,但我不确定,我尝试了几种变体,它们都有相同的结果(包括将主机用双引号括起来)

我的 hosts.txt 文件格式如下

site.com
www.site.subsite.com
im.another.site.com
etc.com

我们欢迎所有的建议!

4

2 回答 2

1

您需要从每个地址中删除尾随的 '\n'。尝试以下操作:

content[i].rstrip('\n'), socket.gethostbyname(content[i].rstrip('\n'))
于 2013-09-03T06:56:00.570 回答
1

file.readlines返回字符串列表而不去除换行符。你必须使用剥离它str.strip

当您逐行处理文件时,请使用 file 作为迭代器而不是使用file.readlines

import socket

with open('hosts.txt') as fp:
    for line in fp:
        host = line.strip()
        print "Host: {}  IP: {}".format(host, socket.gethostbyname(host))
于 2013-09-03T06:56:30.497 回答