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

我正在写一个本地networking的聊天程序。 我希望能够识别计算机并用Python获取用户设置的计算机名称。

使用socket和它的gethostname()function。 这将得到运行Python解释器的计算机的hostname

 import socket print(socket.gethostname()) 

这两个都非常便携:

 import platform platform.node() import socket socket.gethostname() 

任何使用HOSTHOSTNAME环境variables的解决scheme都是不可移植的。 即使它运行在您的系统上,但在特殊环境(如cron)中运行时也可能不起作用。

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

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

os.getenv('HOSTNAME')os.environ['HOSTNAME']不总是工作。 在cron作业和WSDL中,没有设置HTTP HOSTNAME。 用这个代替:

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

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

如果你在/ 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来查看它是否返回看起来像主机名称的东西,如果不是,它会使用我的原始解决scheme。

关于什么 :

 import platform h = platform.uname()[1] 

其实你可能想看看platform.uname()所有结果

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

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

socket.gethostname()可以做

在某些系统上,主机名在环境中设置。 如果是这种情况, os模块可以通过os.getenv把它从环境中拉出来。 例如,如果HOSTNAME是包含你想要的环境variables,那么下面的代码将得到它:

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

更新:正如评论中指出的那样,这并不总是奏效,因为不是每个人的环境都是这样设置的。 我相信在我最初回答这个问题的时候,我正在使用这个解决scheme,因为这是我在networkingsearch中发现的第一件事情,当时它对我很有帮助。 由于缺乏便携性,我现在可能不会使用它。 但是,我将这个答案留作参考。 FWIW,如果您的环境具有系统名称,并且您已经在导入OS模块,则不需要其他导入。 testing它 – 如果它不适用于您希望程序运行的所有环境,请使用提供的其他解决scheme之一。

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

对于我使用的Windows

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

其中defaultValue是一个string,以防止返回None