我正在为本地网络编写聊天程序。我希望能够识别计算机并使用Python获取用户设置的计算机名称。
使用socket及其gethostname()功能。这将获取运行Python解释器的计算机的hostname:
socket
gethostname()
hostname
import socketprint(socket.gethostname())
如果我是对的,你正在寻找socket.gethostname函数:
>> import socket>> socket.gethostname()'terminus'
socket.gethostname()可以做
socket.gethostname()
在某些系统上,主机名是在环境中设置的。如果您是这种情况,os模块可以通过os.getenv将其从环境中拉出来。例如,如果HOSTNAME是包含您想要的内容的环境变量,则以下代码将获得它:
import ossystem_name = os.getenv('HOSTNAME')
更新:正如评论中提到的,这并不总是有效的,因为不是每个人的环境都是这样设置的。我相信在我最初回答这个问题的时候,我正在使用这个解决方案,因为它是我在网络搜索中发现的第一件事,当时它对我有效。由于缺乏可移植性,我现在可能不会使用这个。然而,我将这个答案留给参考目的。FWIW,如果您的环境有系统名称并且您已经导入了os模块,它确实消除了其他导入的需要。测试它-如果它不能在您希望程序运行的所有环境中工作,请使用提供的其他解决方案之一。
这两个都非常便携:
import platformplatform.node() import socketsocket.gethostname()
任何使用HOST或HOSTNAME环境变量的解决方案都是不可移植的。即使它在您的系统上运行,在特殊环境(如cron)中运行时也可能不起作用。
HOST
HOSTNAME
关于什么:
import platform h = platform.uname()[1]
实际上,您可能希望查看platform.uname()中的所有结果
platform.uname()
os.getenv('HOSTNAME')和os.environ['HOSTNAME']并不总是有效。在cron作业和WSDL中,未设置HTTP HOSTNAME。改为使用:
os.getenv('HOSTNAME')
os.environ['HOSTNAME']
import socketsocket.gethostbyaddr(socket.gethostname())[0]
它总是(即使在Windows上)返回一个完全限定的主机名,即使您在/etc/hosts中定义了一个短别名。
如果您在/etc/hosts中定义了别名,那么socket.gethostname()将返回别名。platform.uname()[1]做同样的事情。
platform.uname()[1]
我遇到了一个上面的方法不起作用的情况。这是我现在使用的:
import socketif socket.gethostname().find('.')>=0:name=socket.gethostname()else:name=socket.gethostbyaddr(socket.gethostname())[0]
它首先调用gethostname来查看它是否返回看起来像主机名的东西,如果不是,它使用我的原始解决方案。
无论如何,您都可能会加载os模块,因此另一个建议是:
import osmyhost = os.uname()[1]
我需要在PyLog conf文件中使用的PC名称,套接字库不可用,但os库可用。
对于windows我使用:
os.getenv('COMPUTERNAME', 'defaultValue')
其中defaultValue是一个字符串,以防止返回无
从至少python>=3.3:
您可以使用字段nodename并避免使用数组索引:
nodename
os.uname().nodename
虽然,即使是os.uname的留档也建议使用socket.gethostname()
你必须执行这行代码
sock_name = socket.gethostname()
然后您可以使用名称来查找地址:
print(socket.gethostbyname(sock_name))
要获得完全限定的主机名,请使用socket.getfqdn()
import socket print socket.getfqdn()