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


当前回答

os.getenv('HOSTNAME')和os.getenv。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,看看它是否返回类似主机名的东西,如果不是,它就使用我原来的解决方案。

其他回答

关于什么:

import platform

h = platform.uname()[1]

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

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

对于Windows,我使用的是:

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

哪里defaultValue是一个字符串,以防止None返回

你可能会加载操作系统模块,所以另一个建议是:

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

这两个都是非常可移植的:

import platform
platform.node()

import socket
socket.gethostname()

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

Socket.gethostname()可以做什么