Linux上的Python:在/ etc / hostname中获取主机名

时间:2011-11-24 22:49:48

标签: python linux ip

在Python脚本中,我试图在Linux机器中获取主机名。它是Debian GNU / Linux Amazon EC2实例。我在/etc/hostname中设置了正确的名称。建议的解决方案socket.gethostname()不起作用:它显示ip-加IP元组。

我在StackOverflow上搜索过,没有任何结果,例如heresocket.getfqdn()更糟糕的是:它会产生ip-[IP tuple].eu-west-1.compute.internal

我做错了什么,或者没有干净的解决方案来获取/etc/hostname中的主机名?当然,备份解决方案是读取文件etc/hostname本身,但本质上依赖于平台的东西在某种程度上是异常的。谢谢!

4 个答案:

答案 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())