只是标题,它们之间有什么区别?在 python 中,socket.gethostbyname(socket.gethostname())
并socket.gethostbyname(socket.getfqdn())
在我的计算机上返回不同的结果。
3 回答
从文档中,
socket.gethostname
返回一个字符串,其中包含 Python 解释器当前正在执行的机器的主机名。
socket.getfqdn
如果可用或其他情况,则返回完全限定的域名gethostname
。
完全限定域名是指定其在 DNS 树层次结构中的确切位置的域名。从维基百科的例子:
例如,给定具有本地主机名 myhost 和父域名 example.com 的设备,完全限定域名是 myhost.example.com。
请注意,上面选择的回复非常混乱。
YESsocket.getfqdn
将返回一个完全限定的主机名。但是,如果它将是“localhost.localdomain”,那么您可能实际上想要的是socket.gethostname
,这样您就可以得到一些有用的东西。
不同之处在于一个读取内核节点名/etc/hostname
,/etc/domainname
而另一个读取内核节点名。根据您的发行版、配置、操作系统等,您的里程会有所不同。
这意味着您通常要先检查socket.getfqdn
,并验证它是否返回 'localhost.localdomain'。如果是这样,请socket.gethostname
改用。
最后,python 也有platform.node
它与 python 上的基本相同socket.gethostname
,尽管这可能是多平台代码的更好选择。
这是一个相当重要的细节。
主机名不是完全限定的域名,因此它们返回不同的结果。
getfqdn()
将返回完全限定的域名,而gethostname()
将返回主机名。