我正在为本地网络编写聊天程序。我希望能够识别计算机并使用Python获取用户设置的计算机名称。
答案 0 :(得分:898)
使用socket
及其gethostname()
功能。这将获得运行Python解释器的计算机的hostname
:
import socket
print(socket.gethostname())
答案 1 :(得分:338)
这两个都很便携:
import platform
platform.node()
import socket
socket.gethostname()
使用HOST
或HOSTNAME
环境变量的任何解决方案都不可移植。即使它在您运行它时在您的系统上运行,它也可能在cron等特殊环境中运行时无效。
答案 2 :(得分:92)
无论如何你可能会加载os模块,所以另一个建议是:
import os
myhost = os.uname()[1]
答案 3 :(得分:56)
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来查看它是否返回看起来像主机名的内容,如果没有它使用我原来的解决方案。
答案 4 :(得分:53)
怎么样:
import platform
h = platform.uname()[1]
实际上,您可能希望查看platform.uname()
答案 5 :(得分:16)
如果我没错,你正在寻找socket.gethostname函数:
>> import socket
>> socket.gethostname()
'terminus'
答案 6 :(得分:11)
socket.gethostname()
可以做
答案 7 :(得分:7)
至少从python >= 3.3开始:
您可以使用字段nodename
并避免使用数组索引:
os.uname().nodename
尽管os.uname的文档建议使用socket.gethostname()
答案 8 :(得分:3)
在某些系统上,主机名是在环境中设置的。如果是这种情况,os module可以通过os.getenv将其拉出环境。例如,如果HOSTNAME是包含所需内容的环境变量,则以下内容将获取它:
import os
system_name = os.getenv('HOSTNAME')
更新:如评论中所述,这并不总是有效,因为不是每个人的环境都以这种方式设置。我相信在我最初回答这个问题时,我正在使用这个解决方案,因为这是我在网络搜索中找到的第一件事,当时它对我有用。由于缺乏便携性,我现在可能不会使用它。但是,我将此答案留作参考。 FWIW,如果您的环境具有系统名称并且您已经导入了os模块,它确实消除了对其他导入的需要。测试它 - 如果它不能在您希望程序运行的所有环境中工作,请使用提供的其他解决方案之一。
答案 9 :(得分:2)
要获取标准主机名,请使用socket.getfqdn()
import socket
print socket.getfqdn()
答案 10 :(得分:0)
我需要在我的PyLog配置文件中使用PC的名称,并且套接字库不可用,但是os库是。
对于 Windows ,我使用了:
os.getenv('COMPUTERNAME', 'defaultValue')
其中defaultValue是一个字符串,用于防止返回None
答案 11 :(得分:0)
您必须执行此行代码
sock_name = socket.gethostname()
然后您可以使用该名称找到地址:
print(socket.gethostbyname(sock_name))