我正在为本地网络编写聊天程序。我希望能够识别计算机并使用Python获取用户设置的计算机名称。

有帮助吗?

解决方案

使用 socket 及其 gethostname() 功能。这将获取运行Python解释器的计算机的hostname 通用标签

其他提示

这两个都是可移植的: 通用标签

任何使用HOSTHOSTNAME环境变量的解决方案都是不可移植的。即使它在您的系统上运行时也可以运行,但在cron等特殊环境中运行时可能也无法运行。

您可能仍然会加载os模块,所以另一个建议是: 通用标签

那: 通用标签

实际上,您可能希望查看platform.uname()中的所有结果

os.getenv('HOSTNAME')os.environ['HOSTNAME']并不总是有效。在cron作业和WSDL中,未设置HTTP HOSTNAME。改用它: 通用标签

即使您在 / etc / hosts 中定义了短别名,它也始终(甚至在Windows上)返回标准主机名。

如果您在 / etc / hosts 中定义了别名,那么socket.gethostname()将返回该别名。platform.uname()[1]做同样的事情。

我遇到了以上情况不起作用的情况。这就是我现在正在使用的: 通用标签

它首先调用gethostname来查看它是否返回类似于主机名的内容,如果不使用我的原始解决方案。

如果我是正确的,那么您正在寻找socket.gethostname函数: 通用标签

socket.gethostname()可以做到

至少来自 python>= 3.3

您可以使用字段nodename,并避免使用数组索引: 通用标签

尽管如此,甚至 os.uname 的文档也提出了建议使用socket.gethostname()

在某些系统上,主机名是在环境中设置的。在这种情况下, os模块可以通过以下方式将其从环境中删除 os.getenv 。例如,如果HOSTNAME是包含所需内容的环境变量,则将通过以下方式获取它: 通用标签

更新:如评论中所述,这并不总是有效,因为并非每个人的环境都是以此方式设置的。我相信当我最初回答这个问题时,我正在使用此解决方案,因为这是我在网络搜索中发现的第一件事,当时对我有用。由于缺乏可移植性,我现在可能不会使用它。但是,我将这个答案留作参考。 FWIW,如果您的环境具有系统名称并且您已经在导入os模块,那么它确实消除了其他导入的需要。测试它-如果它不能在您希望程序运行的所有环境中都起作用,请使用提供的其他解决方案之一。

我需要在PyLog conf文件中使用PC的名称,并且套接字库不可用,但是os库可用。

对于 Windows ,我使用了 通用标签

其中defaultValue是防止返回None的字符串

您必须执行这一行代码 通用标签

然后您可以使用该名称找到地址: 通用标签

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top