杰瑞科技汇

Python如何获取主机名?

在 Python 中,获取主机名(hostname)非常简单,主要使用内置的 socket 模块,下面我将为你详细介绍几种方法,并指出它们之间的区别和适用场景。

Python如何获取主机名?-图1
(图片来源网络,侵删)

使用 socket.gethostname() (最常用)

这是最直接、最常用的方法,它会返回运行当前 Python 脚本的机器的主机名。

代码示例:

import socket
# 获取主机名
hostname = socket.gethostname()
print(f"当前机器的主机名是: {hostname}")

输出示例:

当前机器的主机名是: MyLaptop.local

特点:

Python如何获取主机名?-图2
(图片来源网络,侵删)
  • 简单快捷:只需一行代码即可完成。
  • :返回的是操作系统配置的“主机名”(hostname),MyPC, DESKTOP-ABC123, server01.prod 等,它不一定是完全限定的域名(FQDN)。
  • 用途:非常适合在日志记录、配置文件、内部网络通信等场景下标识当前机器。

使用 socket.getfqdn() (获取完全限定域名)

如果你需要获取更完整的域名信息,MyLaptop.localserver01.example.com,应该使用 getfqdn()

代码示例:

import socket
# 获取完全限定域名
fqdn = socket.getfqdn()
print(f"当前机器的完全限定域名是: {fqdn}")
# 你也可以用它来获取另一个主机的FQDN
other_host_fqdn = socket.getfqdn('8.8.8.8')
print(f"Google DNS的FQDN是: {other_host_fqdn}")

输出示例:

当前机器的完全限定域名是: MyLaptop.local
Google DNS的FQDN是: dns.google

特点:

Python如何获取主机名?-图3
(图片来源网络,侵删)
  • 返回完整域名:它会尝试将一个简单的主机名解析为完全限定的域名。gethostname() 返回的是 server01getfqdn() 可能会返回 server01.example.com
  • 依赖DNS解析:它的功能依赖于系统的 DNS 解析配置,DNS 配置不正确或网络不通,它可能返回与 gethostname() 相同的结果。
  • 用途:当你在需要明确主机在网络中完整身份的场景下使用,例如配置 Web 服务器、邮件服务器或在复杂的网络环境中进行服务发现。

使用 platform 模块

platform 模块提供了更多关于系统平台的信息,主机名只是其中之一。

代码示例:

import platform
# 获取主机名
hostname_platform = platform.node()
print(f"使用 platform.node() 获取的主机名: {hostname_platform}")
# 获取更多系统信息
print(f"操作系统: {platform.system()}")  # e.g., 'Windows', 'Linux', 'Darwin'
print(f"系统版本: {platform.release()}") # e.g., '10', '20.04', '21.6.0'
print(f"机器信息: {platform.machine()}") # e.g., 'x86_64', 'AMD64'

输出示例:

使用 platform.node() 获取的主机名: MyLaptop.local
操作系统: Linux
系统版本: 5.15.0-76-generic
机器信息: x86_64

特点:

  • 信息更丰富:除了主机名,还能获取操作系统、版本、架构等多种信息。
  • 底层实现:在大多数系统上,platform.node() 内部也是调用了 socket.gethostname()
  • 用途:当你需要收集系统信息用于报告、调试或环境检测时,platform 模块是更好的选择。

总结与如何选择

方法 模块 返回值 特点 推荐场景
socket.gethostname() socket 操作系统配置的主机名 (e.g., server01) 最简单、最直接,不依赖DNS 日志、配置、内部标识,绝大多数情况下的首选
socket.getfqdn() socket 完全限定域名 (e.g., server01.example.com) 依赖DNS解析,返回更完整的域名 需要明确网络身份,如Web服务器配置
platform.node() platform 主机名 (与 gethostname() 通常相同) 提供丰富的系统信息,主机名是其中一部分 需要同时获取操作系统、版本等多种信息时

  • 如果你只是想知道“我叫什么名字”,用 socket.gethostname()
  • 如果你想知道“我在网络中的完整地址是什么”,用 socket.getfqdn()
  • 如果你不仅想知道名字,还想了解我的“户口本”(操作系统信息),用 platform.node()
分享:
扫描分享到社交APP
上一篇
下一篇