我正在为本地网络编写聊天程序,希望使用Python能够识别计算机并获取用户设置的计算机名称。
使用socket
及其gethostname()
函数。这将获取Python解释器所在计算机的hostname
:
import socket
print(socket.gethostname())
这两个方案都很易于移植:
import platform
platform.node()
import socket
socket.gethostname()
使用 HOST
或 HOSTNAME
环境变量的解决方案不具备可移植性。即使在您运行它时可以工作,但在诸如 cron 等特殊环境中运行时可能无法正常工作。
python -m timeit "import socket; socket.gethostname()"
执行10000次循环,取最佳结果,每次循环耗时76.3微秒。 该命令的功能是导入socket模块,并获取主机名。 - Below the Radarpython -m timeit "import platform; platform.node()" 1000000 loops, best of 3: 0.74 usec per loop
- Below the Radarimport os, platform; os.getenv('HOSTNAME', os.getenv('COMPUTERNAME', platform.node())).split('.')[0]
应该是跨平台的,并且支持环境变量(如果存在),这允许在紧急情况下进行一些用户控制,例如 HOSTNAME=correct python xyz.py
。 - Orwellophile你可能已经加载了os模块,因此另一个建议是:
import os
myhost = os.uname()[1]
platform.uname()[1]
,在Windows上也可以使用。 - fantabolous那么这个怎么样:
import platform
h = platform.uname()[1]
实际上,您可能希望查看platform.uname()
中的所有结果。
platform.node()
相同。 - nurettinos.getenv('HOSTNAME')
和 os.environ['HOSTNAME']
并不总是有效。在 cron 作业和 WSDL 中,HTTP 主机名未设置。使用以下代码替代:
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函数以查看返回的结果是否类似于主机名,如果不是,则使用我的原始解决方案。
socket.getfqdn()
,尽管它并不是OP所要求的内容。 - jfssocket.gethostbyaddr(socket.gethostname())
返回 ('localhost', ['my-machine-name', 'my-machine-namelocaldomain'], ['::1'])
,因此只返回第一个元素 localhost
。(同时,socket.gethostname()
对我来说返回 my-machine-name
。) - jamesdlin从至少 python >= 3.3 开始:
您可以使用字段nodename
而不使用数组索引:
os.uname().nodename
虽然,甚至os.uname的文档建议使用socket.gethostname()
如果我理解正确,您正在寻找socket.gethostname函数:
>> import socket
>> socket.gethostname()
'terminus'
你需要执行这行代码
sock_name = socket.gethostname()
然后,您可以使用名称查找地址:
print(socket.gethostbyname(sock_name))
socket.gethostname()
可以做什么?
要获取完全合格的主机名,请使用socket.getfqdn()。
import socket
print socket.getfqdn()
socket.gethostname()
返回的主机名。 - Asclepius
socket.getfqdn()
函数。 - Dave Forgac