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上与windows上的python安装
Linux 上的 Python Wheels(如何?为啥?)