为什么python';s socket.getfqdn()是否有时返回localhost.localdomain?

为什么python';s socket.getfqdn()是否有时返回localhost.localdomain?,python,networking,hosts,Python,Networking,Hosts,在主机上使用socket.getfqdn()时,我不太明白看到了什么。这是我看到的,然后我会解释: [root@myawesomehost.iscool ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdoma

在主机上使用
socket.getfqdn()
时,我不太明白看到了什么。这是我看到的,然后我会解释:

[root@myawesomehost.iscool ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@myawesomehost.iscool ~]#
[root@myawesomehost.iscool ~]#
[root@myawesomehost.iscool ~]# python
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-17)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import socket
>>> socket.getfqdn()
'myawesomehost.iscool.ny.domain.com'
>>> socket.gethostname()
'myawesomehost.iscool.ny.domain.com'
>>>
[1]+  Stopped                 python
[root@myawesomehost.iscool ~]# vim /etc/hosts
[root@myawesomehost.iscool ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 myawesomehost.iscool.ny.domain.com
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6 myawesomehost.iscool.ny.domain.com
[root@myawesomehost.iscool ~]#
[root@myawesomehost.iscool ~]#
[root@myawesomehost.iscool ~]# fg
python

>>> socket.getfqdn()
'localhost.localdomain'
>>> socket.gethostname()
'myawesomehost.iscool.ny.domain.com'
>>>
>>>
>>> exit()
因此,当我将主机的fqdn附加到
/etc/hosts
127.0.0.1
项的末尾时,
socket.getfqdn()
开始返回
localhost.localdomain
。但是,如果删除它,一切正常,并返回正确的fqdn

我阅读了pythonsocket文档(),其中介绍了如何使用句点选择第一个值。但是为什么它不总是返回localhost.localdomain

基本上,我想我已经把我的问题缩小到了这一步。但是我不知道引擎盖下面发生了什么,我真的很想知道。

医生说:

返回名称的完全限定域名。如果名称被省略或为空,则将其解释为本地主机

我相信您知道,主机可以有多个接口,每个接口可能有自己的IP地址(甚至几个),并且该IP地址可以解析为FQDN

因此,除了localhost之外,主机没有通用的规范FQDN。如果后者有一个命名的条目(我认为应该是这样的),它就会被返回

为特定的IP尝试<代码> .GETFQDN()/CUT>,或考虑使用并从其返回的列表中检索正确别名。


我还认为它与Python没有什么特别的关系;这就是IP堆栈的工作原理。

我想我理解。。。。但是为什么只有当主接口IP地址的fqdn附加到hosts文件中的127.0.0.1条目后,
localhost.localdomain
才会返回?我每次都不会传入值,因此在两次运行中都会出现“名称被忽略或为空”的情况。