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

Linux上的Python:在/etc/hostname中获取主机名,python,linux,ip,Python,Linux,Ip,在Python脚本中,我试图在Linux框中获取主机名。它是一个Debian GNU/Linux Amazon EC2实例。我已在/etc/hostname中设置了正确的名称。推荐的解决方案socket.gethostname()不起作用:它显示ip加ip元组 我已经搜索了StackOverflow,但没有任何结果,例如socket.getfqdn()甚至更糟:它产生ip-[ip tuple].eu-west-1.compute.internal 是我做错了什么,还是没有干净的解决方案来获取/e

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

我已经搜索了StackOverflow,但没有任何结果,例如
socket.getfqdn()
甚至更糟:它产生
ip-[ip tuple].eu-west-1.compute.internal


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

您是否尝试过socket.gethostbyaddr(socket.gethostname())?

尝试
os.uname()
。根据,它是返回的元组中的第二个位置


但是,正如文档本身所述,“获取主机名的更好方法是
socket.gethostname()
甚至
socket.gethostbyaddr(socket.gethostname())

主机名的通用源代码是。此程序调用
uname-n
的等价项


在Python中,您可以使用或。

首先,所有的功劳都应该归于m1k3y02,他在评论中给了我提示。现在,我将给出正确的答案:我的AmazonEC2已经很久没有重新启动了。我在
/etc/hostname
中设置了主机名,但它没有到达系统,如
uname-n
所示。因此,只需运行
/etc/init.d/hostname.sh
就可以做到这一点。之后,
socket.gethostname()
按预期工作


这里的教训是:首先看看系统是否得到了它,然后再责怪语言。

当您取消ame-n时,是否看到了所需的主机名?如果没有,请尝试执行/etc/init.d/hostname.shAmazing!就这样。现在
socket.gethostname()
返回正确的主机名。所以问题是机器没有重新启动,也没有使用新的主机名。如果你想用这些信息回答这个问题,我会投你一票。