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

Posted

技术标签:

【中文标题】Linux 上的 Python:在 /etc/hostname 中获取主机名【英文标题】:Python on Linux: get host name in /etc/hostname 【发布时间】:2012-01-05 23:38:07 【问题描述】:

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

我在 *** 上进行了搜索,但没有任何结果,例如here。 socket.getfqdn() 更糟:它产生ip-[IP tuple].eu-west-1.compute.internal

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

【问题讨论】:

执行 uname -n 时是否看到所需的主机名?如果没有尝试执行 /etc/init.d/hostname.sh 太棒了!就是这样。现在socket.gethostname() 返回正确的主机名。所以问题只是机器没有重新启动并且没有采用新的主机名。如果你想用这个信息回答这个问题,我会投赞成票。 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

主机名的通用来源是hostname(1)。该程序调用uname -n 的等价物。

在 Python 中,您可以使用 platform.node()os.uname()[1]

【讨论】:

【参考方案3】:

首先,所有的功劳都应该归功于 m1k3y02,他在评论中给了我提示。现在,对于sake of posterity,我将给出正确答案:我的 Amazon EC2 很久没有重启了。我在/etc/hostname 中设置了主机名,但它没有到达系统,正如uname -n 所证明的那样。所以只需运行/etc/init.d/hostname.sh 就可以了。之后,socket.gethostname() 按预期工作。

这里的教训:先看看系统是否得到它,然后才之后责备语言。

【讨论】:

【参考方案4】:

你试过socket.gethostbyaddr(socket.gethostname())吗?

【讨论】:

以上是关于Linux 上的 Python:在 /etc/hostname 中获取主机名的主要内容,如果未能解决你的问题,请参考以下文章

IT人员必备linux安全运维之Ssh用途安全性身份认证以及配置……

linux之socket , URL 访问http服务器

第一天--关于在linux上与windows上的python安装

Linux 上的 Python Wheels(如何?为啥?)

在 Linux 上的终端启动时运行 python 脚本[关闭]

斑马斑马-08-白云之上-python在Linux上的部署