import platform
platform.node()
这使我得到了类似于“192-168-1-4.tpgi.com.au”的东西,取决于分配给MacBook的IP地址。不同的路由器会给出不同的结果。 我还从中得到了类似的结果。
import socket
socket.gethostname()
其次,我注意到有一篇文章回答了一个类似的问题 4271740/how-can-i-use-python-to-get-the-system-hostname
然而,这个问题略有不同,因为就用户而言,他们应该在系统设置中看到主机名,但实际上这与所返回的主机名是不同的。如果我运行:
which returns again something like '192-168-1-4.tpgi.com.au'。
sudo scutil --get LocalHostName
我获取系统设置中的名称(在共享下方,其中混淆地显示了计算机名称和本地主机名,它们也可能不同)。本地主机名带有以下限定语句:
你本地网络上的计算机可以访问你的计算机: foo.local
所有这些都是问题的原因是我的应用程序使用主机名,而Mac上的主机名与本地主机名和计算机名称不同。然后,该主机名出现在我们的用户界面中,并且当以“192-168-1-4.tpgi.com.au”的形式出现时,对于识别用户计算机来说并不有帮助。用户最有可能期望看到他们的计算机名称,因为这是可见的。在Mac上,主机名不可见,可以使用命令设置或获取,但这不太可能是我们的用户在遇到此问题时自然想到的事情。
解决方案
所以问题涉及到Mac的开箱即用设置,我相信。可以通过在终端中使用以下命令查询Mac上的主机名:
hostname
192-168-1-4.tpgi.com.au
以下是我运行的查询结果,它将返回实际用于解析IP地址的主机名。正如我上面所提到的,这与计算机名称不匹配,使用我们的应用程序时可能会引起混淆。
sudo scutil --get HostName
HostName: not set
因此,我使用以下命令将主机名设置为机器上我认识的名称,如下所示:
sudo scutil --set HostName foo
现在,当我运行以下命令时,我得到了我和其他非技术用户希望看到的结果。
import socket
socket.gethostname()
foo
import platform
platform.node()
foo
最后,为了保险起见,我从终端运行了
hostname
foo
结论
好的,虽然我已经写了我找到了一个解决方案,但实际上并不是我需要的解决方案,问题在于我需要显示用户设置并识别的计算机名,而不是主机名。由于我正在使用python,我真的很想找到一个可以找到计算机名而不是主机名的mac python命令。因此,如果有人知道一种干净和可持续的方法来做到这一点(我希望不必运行shell命令并解析其输出),我会非常感激!如果同样的命令(或函数)也能运行在其他操作系统类型如Windows和Linux上,那就太好了,但我已经接受了这是一个mac的事情,至少据我所知。
与此同时,如果有人遇到类似的问题,我希望上面的内容能够帮助他们 :)
谢谢!