如何使用Python获取系统主机名?

问题描述 投票:578回答:11

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

python hostname
11个回答
925
投票

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

import socket
print(socket.gethostname())

1
投票

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

对于Windows我用过:

os.getenv('COMPUTERNAME', 'defaultValue')

其中defaultValue是一个字符串,用于防止返回None


0
投票

你必须执行这行代码

sock_name = socket.gethostname()

然后你可以使用名称来找到addr:

print(socket.gethostbyname(sock_name))

347
投票

这两个都非常便携:

import platform
platform.node()

import socket
socket.gethostname()

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


98
投票

你可能会加载os模块,所以另一个建议是:

import os
myhost = os.uname()[1]

56
投票

关于什么 :

import platform

h = platform.uname()[1]

实际上你可能想查看platform.uname()中的所有结果


56
投票

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

import socket
socket.gethostbyaddr(socket.gethostname())[0]

它总是(即使在Windows上)返回一个完全限定的主机名,即使您在/ etc / hosts中定义了一个短别名。

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

我遇到了上述情况不起作用的情况。这就是我现在使用的:

import socket
if socket.gethostname().find('.')>=0:
    name=socket.gethostname()
else:
    name=socket.gethostbyaddr(socket.gethostname())[0]

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


16
投票

如果我是对的,你正在寻找socket.gethostname函数:

>> import socket
>> socket.gethostname()
'terminus'

11
投票

socket.gethostname()可以做到


7
投票

从至少python >= 3.3

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

os.uname().nodename

虽然,甚至os.uname的文件建议使用socket.gethostname()


3
投票

在某些系统上,主机名是在环境中设置的。如果是这种情况,os module可以通过os.getenv将其拉出环境。例如,如果HOSTNAME是包含所需内容的环境变量,则以下内容将获取它:

import os
system_name = os.getenv('HOSTNAME')

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

© www.soinside.com 2019 - 2024. All rights reserved.