Linux上的Python:获取/etc/hostname中的主机名
我在一个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 个回答
获取主机名的通用方法是使用 hostname(1) 这个程序。这个程序的作用相当于运行 uname -n
命令。
在Python中,你可以使用 platform.node()
或者 os.uname()[1]
来获取主机名。
试试 os.uname()
。根据文档,它返回的结果中,主机名在第二个位置。
不过,正如文档所说,获取主机名的“更好方法”是使用 socket.gethostname()
,或者甚至可以用 socket.gethostbyaddr(socket.gethostname())
。
首先,所有的功劳都要归功于m1k3y02,他在评论中给了我提示。现在,为了让后人也能看到,我来给出正确的答案:我的Amazon EC2服务器已经很久没有重启了。我在/etc/hostname
里设置了主机名,但系统并没有识别到,uname -n
的结果就证明了这一点。所以我只需要运行/etc/init.d/hostname.sh
,问题就解决了。之后,socket.gethostname()
就正常工作了。
这里的教训是:首先要看看系统是否识别了设置,只有在确认之后再去怪语言本身。