当我在我的主机上使用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。我阅读了Python socket文档(https://docs.python.org/2/library/socket.html#socket.getfqdn),它说了一些关于选择第一个带有句点的值的内容。但是为什么它不总是返回
localhost.localdomain
呢?基本上,我认为我已经将我的问题缩小到了这个可重现的步骤。但是我不知道内部发生了什么,我真的很想知道。
localhost.localdomain
?我两次都没有传递值,因此两次运行都出现了“名称被省略或为空”的情况。 - Carrot