0

我在下面创建了这个脚本,它工作正常。但输出并不友好(见下文)。我希望第一行只显示主机名和 IP 并删除 (,'[], 请建议

('testhostname', [], ['10.10.10.10'])
cannot resolve hostname:  10.10.10.11

import socket
pfile = open ('C:\\Python27\\scripts\\test.txt')
while True:
    IP = pfile.readline()
    if not IP:
        break
    try:
        host = socket.gethostbyaddr(IP.rstrip())
        print host
    except socket.herror, err:
        print "cannot resolve hostname: ", IP
pfile.close()
4

1 回答 1

4

我建议不要打印host返回的所有元组,而是将它们gethostbyaddr解压缩到单独的变量中,然后您可以根据需要打印:

hostname, alias_list, ip_addr_list = gethostbyaddr(IP.rstrip())
print hostname, ip_addr_list # or ip_addr_list[0] if you only want the one IP

如果您想更好地控制格式,我建议使用以下str.format方法:

print "hostname: {}, IP(s): {}".format(hostname, ", ".join(ip_addr_list))

此外,还有一些其他代码建议(与您的主要问题没有直接关系):

  • 使用with语句而不是手动打开和关闭文件。
  • 直接迭代文件对象(使用for IP in pfile:),而不是每次都使用while True:和调用。pfile.readline()
  • 使用语法except socek.herror as err而不是带有逗号的旧形式(在 Python 2 中已弃用,在 Python 3 中不再存在)。
于 2013-09-26T20:32:17.653 回答