7

只是标题,它们之间有什么区别?在 python 中,socket.gethostbyname(socket.gethostname())socket.gethostbyname(socket.getfqdn())在我的计算机上返回不同的结果。

4

3 回答 3

7

从文档中,

socket.gethostname返回一个字符串,其中包含 Python 解释器当前正在执行的机器的主机名。

socket.getfqdn如果可用或其他情况,则返回完全限定的域名gethostname

完全限定域名是指定其在 DNS 树层次结构中的确切位置的域名。从维基百科的例子:

例如,给定具有本地主机名 myhost 和父域名 example.com 的设备,完全限定域名是 myhost.example.com。

于 2012-12-18T11:33:41.637 回答
4

请注意,上面选择的回复非常混乱。

YESsocket.getfqdn将返回一个完全限定的主机名。但是,如果它将是“localhost.localdomain”,那么您可能实际上想要的是socket.gethostname,这样您就可以得到一些有用的东西。

不同之处在于一个读取内核节点名/etc/hostname/etc/domainname而另一个读取内核节点名。根据您的发行版、配置、操作系统等,您的里程会有所不同。

这意味着您通常要先检查socket.getfqdn,并验证它是否返回 'localhost.localdomain'。如果是这样,请socket.gethostname改用。

最后,python 也有platform.node它与 python 上的基本相同socket.gethostname,尽管这可能是多平台代码的更好选择。

这是一个相当重要的细节。

于 2017-04-10T18:14:48.933 回答
0

主机名不是完全限定的域名,因此它们返回不同的结果。

getfqdn()将返回完全限定的域名,而gethostname()将返回主机名

于 2012-12-18T11:28:39.113 回答