在Python脚本中,我试图在Linux机器中获取主机名。它是Debian GNU / Linux Amazon EC2实例。我在/etc/hostname
中设置了正确的名称。建议的解决方案socket.gethostname()
不起作用:它显示ip-加IP元组。
我在StackOverflow上搜索过,没有任何结果,例如here。 socket.getfqdn()
更糟糕的是:它会产生ip-[IP tuple].eu-west-1.compute.internal
。
我做错了什么,或者没有干净的解决方案来获取/etc/hostname
中的主机名?当然,备份解决方案是读取文件etc/hostname
本身,但本质上依赖于平台的东西在某种程度上是异常的。谢谢!
答案 0 :(得分:13)
试试os.uname()
。根据{{3}},它是元组中的第二个位置。
但是,正如文档本身所述,“获取主机名的更好方法是socket.gethostname()
甚至socket.gethostbyaddr(socket.gethostname())
。”
答案 1 :(得分:7)
主机名的通用来源是hostname(1)。该程序调用相当于uname -n
。
在Python中,您可以使用platform.node()
或os.uname()[1]
。
答案 2 :(得分:7)
首先,所有信用都应该转到m1k3y02,他在评论中给了我提示。现在,对于sake of posterity,我会给出正确答案:我的Amazon EC2很长一段时间没有重新启动。我在/etc/hostname
中设置了主机名,但它没有到达系统,uname -n
证明了这一点。因此,只需运行/etc/init.d/hostname.sh
即可。之后,socket.gethostname()
按预期工作。
这里的教训:首先看看系统是否得到它,然后只有 指责语言。
答案 3 :(得分:5)
您是否尝试过socket.gethostbyaddr(socket.gethostname())
?