如何在MacOS Sierra / High Sierra中使用python获取用户设置的计算机名称

以下问题已部分得到解答,请参阅下面的解决方案部分.所以我发布这部分是为了帮助其他人,而且因为解决方案我还没有真正解决问题.

因此,问题是为什么主机名由以下技术(使用python的平台和套接字库)给出,根据您所连接的路由器以及为什么它也与计算机名称和本地主机名不同而给出不同的主机名.顺便说一句,这也是非常特定的.

首先,我使用的是搭配High Sierra 10.13.6的MacBook pro 2015型号.我使用终端并执行以下操作:

import platform
platform.node()

这给了我类似’192-168-1-4.tpgi.com.au’的东西,具体取决于分配给MacBook的IP地址.不同路由器给出不同的结果
我也得到了类似的结果

import socket
socket.gethostname()

它再次返回类似’192-168-1-4.tpgi.com.au’的内容.

其次,我承认这篇文章回答了类似的问题4271740/how-can-i-use-python-to-get-the-system-hostname

但是,这个问题略有不同,毕竟只要我的应用程序的用户知道,主机名应该是他们在系统设置中可以看到的,这实际上是不同的.如果我跑:

sudo scutil --get LocalHostName

我得到了系统设置中显示的名称(在共享下,它相当混乱地显示计算机名称和本地主机名,也可能不同).显示本地主机名,并带有限定语句:

Computers on your local network can access your computer at:
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事物,至少就我所知.

同时我希望如果有其他人遇到类似的问题上述帮助:)

谢谢!

最佳答案 我可以确认这个错误以及解决方法,注意它不会立即生效,不需要重新启动,但DNS缓存需要到期(或过期)才能完全有效.

我遇到了影响任何非fqdn解决方案的相同问题,而不仅仅是本地计算机名称.例如nslookup或ping似乎完美地工作,而只有python socket.getfqdn()和socket.gethostbyname()似乎被破解.我的系统同时具有IPv4和IPv6堆栈,这可能与问题有关.

解决方法如下:

sudo scutil --set HostName `hostname`

主机名必须返回FQDN才能使其正常工作.

在我的情况下它就像foo.lan,并且在做完这个python后开始能够解析像foo.lab或bar.lan这样的名字.

因为OS本机工具不受此影响,所以我最终创建了与MacOS相关的Python错误,因为我们不应该被迫使用上面的解决方法来使其工作.

https://bugs.python.org/issue35164< – 让我们在这里跟进.

点赞