Cómo hacer que el usuario configure el nombre de la computadora usando Python en MacOS Sierra / High Sierra

a pregunta a continuación se ha respondido en parte, consulte laSolució sección a continuación. Así que publico esto en parte para ayudar a otros y también porque la solución que tengo realmente no ha resuelto el problema todavía.

Pregunt

Entonces, la pregunta es por qué el nombre de host dado por las siguientes técnicas (usando la plataforma de Python y las bibliotecas de sockets) da diferentes nombres de host dependiendo de qué enrutador está conectado y por qué también es diferente al nombre de la computadora y también al nombre de host local. Por cierto, esto también es muy específico de Mac.

Primero, estoy usando un modelo MacBook pro 2015 con High Sierra 10.13.6. Yo uso terminal y hago lo siguiente:

import platform
platform.node()

Esto me da algo como '192-168-1-4.tpgi.com.au' dependiendo de la dirección IP asignada a la MacBook. Diferentes enrutadores dan diferentes resultados. También obtengo resultados similares de

import socket
socket.gethostname()

que vuelve de nuevo algo como '192-168-1-4.tpgi.com.au'.

n segundo lugar, reconozco el artículo que responde una pregunta simila 4271740 / how-can-i-use-python-to-get-the-system-hostname

Sin embargo, este problema es sutilmente diferente, después de todo, hasta donde el usuario de mi aplicación sabe, el nombre de host debe ser el que puede ver en la configuración de su sistema, que en realidad es diferente. Si corro:

sudo scutil --get LocalHostName

Obtengo el nombre como se muestra en la configuración del sistema (en compartir donde muestra de manera confusa tanto el nombre de la computadora como el nombre del host local, que también puede ser diferente). El nombre del host local se muestra con una declaración calificada:

as computadoras de su red local pueden acceder a su computadora en: foo.local

La razón de que todo esto sea un problema es que mi aplicación usa el nombre de host, que es diferente del nombre de host local y el nombre de la computadora en una Mac. Este nombre de host aparece en nuestra interfaz de usuario y, por supuesto, no es útil para identificar la computadora del usuario cuando está en la forma '192-168-1-4.tpgi.com.au'. Lo más probable es que el usuario espere ver el nombre de su computadora ya que esto es visible. En una Mac, el nombre de host no es visible, se puede configurar u obtener con comandos, pero no es probable que sea algo que nuestros usuarios piensen naturalmente si se enfrentan a este problema.

Solució

Por lo tanto, el problema se relaciona con la forma en que las Mac se configuran de fábrica. El nombre de host se puede consultar en una Mac utilizando el siguiente comando en la terminal:

hostname
192-168-1-4.tpgi.com.au

which devolverá el nombre de host que realmente se utiliza para resolver a la dirección IP. Como mencioné anteriormente, esto no coincide con el nombre de la computadora que tiende a causar confusión al usar nuestra aplicación. Cuando ejecuté la siguiente consulta, descubrí esto.

sudo scutil --get HostName
HostName: not set

Así que utilicé el siguiente comando para establecer el nombre de host en algo que reconozco para la máquina como así

sudo scutil --set HostName foo

Ahora cuando ejecuto los siguientes comandos obtengo el resultado que yo y otros usuarios menos técnicos esperaríamos.

import socket
socket.gethostname()
foo

import platform
platform.node()
foo

y finalmente solo por si acaso, desde la terminal ejecuté

hostname
foo

Conclusió

Ok, así que mientras escribí que he encontrado una solución, no es realmente la solución que necesito, el problema es que necesito mostrar el nombre de la computadora que el usuario ha configurado y reconocerá en lugar del nombre del host. Como estoy usando Python, realmente me gustaría poder encontrar un comando de Python para Mac que pueda encontrar el nombre de la computadora, no el nombre de host. Entonces, si alguien conoce una forma limpia y sostenible de hacer esto (preferiría no tener que ejecutar un comando de shell y analizar su salida), ¡estaría muy agradecido! Sería genial si ese mismo comando (o función) también se ejecutara en otros tipos de sistema operativo como Windows y Linux, pero he aceptado que esto es una cosa mac, al menos por lo que puedo decir.

ientras tanto, espero que lo anterior ayude si alguien más se encuentra con problemas similares:)

¡Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta