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

发布于 2024-10-04 10:56:53 字数 56 浏览 5 评论 0原文

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

I'm writing a chat program for a local network. I would like be able to identify computers and get the user-set computer name with Python.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(12

诗酒趁年少 2024-10-11 10:56:53

使用 socket 及其 gethostname() 功能。这将获取运行 Python 解释器的计算机的主机名:

import socket
print(socket.gethostname())

Use socket and its gethostname() functionality. This will get the hostname of the computer where the Python interpreter is running:

import socket
print(socket.gethostname())
羁〃客ぐ 2024-10-11 10:56:53

这两者都非常可移植:

import platform
platform.node()

import socket
socket.gethostname()

任何使用 HOSTHOSTNAME 环境变量的解决方案都是不可移植的。即使它在您的系统上运行时可以运行,但在特殊环境(例如 cron)中运行时也可能无法运行。

Both of these are pretty portable:

import platform
platform.node()

import socket
socket.gethostname()

Any solutions using the HOST or HOSTNAME environment variables are not portable. Even if it works on your system when you run it, it may not work when run in special environments such as cron.

生生不灭 2024-10-11 10:56:53

无论如何,您可能会加载 os 模块,因此另一个建议是:

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

You will probably load the os module anyway, so another suggestion would be:

import os
myhost = os.uname()[1]
ま昔日黯然 2024-10-11 10:56:53

怎么样:

import platform

h = platform.uname()[1]

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

What about :

import platform

h = platform.uname()[1]

Actually you may want to have a look to all the result in platform.uname()

北凤男飞 2024-10-11 10:56:53

os.getenv('HOSTNAME')os.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 来查看它是否返回看起来像主机名的内容,如果没有,它使用我原来的解决方案。

os.getenv('HOSTNAME') and os.environ['HOSTNAME'] don't always work. In cron jobs and WSDL, HTTP HOSTNAME isn't set. Use this instead:

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

It always (even on Windows) returns a fully qualified host name, even if you defined a short alias in /etc/hosts.

If you defined an alias in /etc/hosts then socket.gethostname() will return the alias. platform.uname()[1] does the same thing.

I ran into a case where the above didn't work. This is what I'm using now:

import socket
if socket.gethostname().find('.')>=0:
    name=socket.gethostname()
else:
    name=socket.gethostbyaddr(socket.gethostname())[0]

It first calls gethostname to see if it returns something that looks like a host name, if not it uses my original solution.

_失温 2024-10-11 10:56:53

至少从 python >= 3.3 开始:

您可以使用字段 nodename 并避免使用数组索引:

os.uname().nodename

尽管如此,即使是 os.uname 建议使用 socket.gethostname()

From at least python >= 3.3:

You can use the field nodename and avoid using array indexing:

os.uname().nodename

Although, even the documentation of os.uname suggests using socket.gethostname()

北城孤痞 2024-10-11 10:56:53

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

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

If I'm correct, you're looking for the socket.gethostname function:

>> import socket
>> socket.gethostname()
'terminus'
凉月流沐 2024-10-11 10:56:53

你必须执行这行代码

sock_name = socket.gethostname()

然后你可以使用名称来查找 addr :

print(socket.gethostbyname(sock_name))

You have to execute this line of code

sock_name = socket.gethostname()

And then you can use the name to find the addr :

print(socket.gethostbyname(sock_name))
无可置疑 2024-10-11 10:56:53

socket.gethostname() 可以

socket.gethostname() could do

半仙 2024-10-11 10:56:53

要获取完全限定的主机名,请使用 socket.getfqdn()

import socket

print socket.getfqdn()

To get fully qualified hostname use socket.getfqdn()

import socket

print socket.getfqdn()
优雅的叶子 2024-10-11 10:56:53

在某些系统上,主机名是在环境中设置的。如果您是这种情况,os 模块 可以通过以下方式将其从环境中拉出: os.getenv。例如,如果 HOSTNAME 是包含您想要的环境变量,则以下内容将得到它:

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

更新:正如注释中所述,这并不总是有效,因为并非每个人的环境都是这样设置的。我相信,在我最初回答这个问题时,我正在使用这个解决方案,因为它是我在网络搜索中找到的第一个解决方案,并且当时它对我有用。由于缺乏可移植性,我现在可能不会使用它。不过,我留下这个答案仅供参考。 FWIW,如果您的环境具有系统名称并且您已经导入了 os 模块,那么它确实消除了其他导入的需要。测试它 - 如果它不能在您希望程序运行的所有环境中工作,请使用提供的其他解决方案之一。

On some systems, the hostname is set in the environment. If that is the case for you, the os module can pull it out of the environment via os.getenv. For example, if HOSTNAME is the environment variable containing what you want, the following will get it:

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

Update: As noted in the comments, this doesn't always work, as not everyone's environment is set up this way. I believe that at the time I initially answered this I was using this solution as it was the first thing I'd found in a web search and it worked for me at the time. Due to the lack of portability I probably wouldn't use this now. However, I am leaving this answer for reference purposes. FWIW, it does eliminate the need for other imports if your environment has the system name and you are already importing the os module. Test it - if it doesn't work in all the environments in which you expect your program to operate, use one of the other solutions provided.

千紇 2024-10-11 10:56:53

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

对于 Windows 我使用:

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

其中 defaultValue 是一个字符串,以防止返回 None

I needed the name of the PC to use in my PyLog conf file, and the socket library is not available, but os library is.

For Windows I used:

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

Where defaultValue is a string to prevent None being returned

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文