socket.gethostbyname(socket.gethostname())
和socket.gethostbyname(socket.getfqdn())
会在我的计算机上返回不同的结果。
答案 0 :(得分:6)
来自文档,
socket.gethostname
返回一个字符串,其中包含Python解释器当前正在执行的机器的主机名。
socket.getfqdn
会返回完全限定的域名(如果可用)或gethostname
。
完全限定域名是一个域名,用于指定其在DNS树层次结构中的确切位置。来自维基百科的例子:
例如,给定具有本地主机名myhost和父级的设备 域名example.com,完全限定的域名是 myhost.example.com。
答案 1 :(得分:3)
请注意,上面选择的回复是相当令人困惑。
YES socket.getfqdn
将返回一个完整限定的主机名。但如果它将成为“localhost.localdomain”'你可能实际上想要socket.gethostname
,以便得到一些有用的东西。
不同之处在于,一个读取/etc/hostname
和/etc/domainname
,而另一个读取内核节点名称。根据您的分配,配置,操作系统等,您的里程将变化。
这意味着您通常需要首先检查socket.getfqdn
,并验证它是否返回' localhost.localdomain'。如果是,请改用socket.gethostname
。
最后,python也有platform.node
,它与python上的socket.gethostname
基本相同,不过这可能是多平台代码的更好选择。
所以,是的,这是一个非常重要的细节。把这个放在这里所以我的同事总是先在谷歌中看到这个,可以看到这个; P
ps:嗨妈妈,pwnbus,alm。
答案 2 :(得分:1)
主机名不是完全限定的域名,因此它们会返回不同的结果。
getfqdn()
将返回完全限定的域名,而gethostname()
将返回主机名。