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

10 投票
4 回答
15000 浏览
提问于 2025-04-17 07:01

我在一个Python脚本里想要获取Linux系统的主机名。这是一个运行Debian GNU/Linux的亚马逊EC2实例。我已经在/etc/hostname文件里设置了正确的名字。可是推荐的方法socket.gethostname()却不管用,它显示的是IP地址加上一个IP元组。

我在StackOverflow上查了很多资料,但没有找到解决办法,比如这里提到的。socket.getfqdn()的效果更糟,它返回的是ip-[IP元组].eu-west-1.compute.internal

我是不是做错了什么,还是说没有简单的方法可以获取/etc/hostname里的主机名?当然,备选方案是直接读取/etc/hostname这个文件,但这种依赖于平台的方法总感觉不太妥当。谢谢!

4 个回答

7

获取主机名的通用方法是使用 hostname(1) 这个程序。这个程序的作用相当于运行 uname -n 命令。

在Python中,你可以使用 platform.node() 或者 os.uname()[1] 来获取主机名。

13

试试 os.uname()。根据文档,它返回的结果中,主机名在第二个位置。

不过,正如文档所说,获取主机名的“更好方法”是使用 socket.gethostname(),或者甚至可以用 socket.gethostbyaddr(socket.gethostname())

8

首先,所有的功劳都要归功于m1k3y02,他在评论中给了我提示。现在,为了让后人也能看到,我来给出正确的答案:我的Amazon EC2服务器已经很久没有重启了。我在/etc/hostname里设置了主机名,但系统并没有识别到,uname -n的结果就证明了这一点。所以我只需要运行/etc/init.d/hostname.sh,问题就解决了。之后,socket.gethostname()就正常工作了。

这里的教训是:首先要看看系统是否识别了设置,只有在确认之后再去怪语言本身。

撰写回答