python 获取本机ip的两种方式

通过python获取ip的两种方式。第一种有坑,具体什么坑,下面细说。

方法一(坑)

import socket

# 获取本机计算机名称
hostname = socket.gethostname()
# 获取本机ip
ip = socket.gethostbyname(hostname)
print(ip)

这种方式在window开发环境,ubuntu环境下都是正常获取的,但是!在centos的环境中,socket.gethostbyname这个方法会引发一个异常!!不要问我这么知道的,线上更新事故!由于开环境,测试环境都不是centos所以未发现!当然有可能是没有正确设置主机名称,没有配置主机名称必定引发这个异常。

方法二(完美解决)

import socket

def get_host_ip():
    """
    查询本机ip地址
    :return: ip
    """
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect(('8.8.8.8', 80))
        ip = s.getsockname()[0]
    finally:
        s.close()

    return ip

if __name__ == '__main__':
    print(get_host_ip())

总结

开发,测试,线上尽量在同一环境下,避免各种坑

Life is more than the present.