Como obter o nome do computador definido pelo usuário usando python no MacOS Sierra / High Sierra

A pergunta abaixo foi parcialmente respondida, consulte oSoluçã seção abaixo. Então, eu estou postando isso em parte para ajudar os outros e também desde que a solução que eu realmente não resolvi o problema aind

Questã

Então, a questão é por que o nome do host fornecido pelas técnicas a seguir (usando a plataforma do python e as libs de soquete) fornece nomes de host diferentes, dependendo do roteador ao qual você está conectado e por que também é diferente do nome do computador e também do nome do host local. A propósito, isso também é muito específico para mac.

Primeiramente, estou usando um modelo do MacBook pro 2015 com o High Sierra 10.13.6. Eu uso o terminal e faço o seguinte:

import platform
platform.node()

Isso me dá algo como '192-168-1-4.tpgi.com.au', dependendo do endereço IP atribuído ao MacBook. Roteadores diferentes fornecem resultados diferentes. Eu também recebo resultados semelhantes de

import socket
socket.gethostname()

que retorna novamente algo como '192-168-1-4.tpgi.com.au'.

Em segundo lugar, reconheço o artigo que responde a uma pergunta semelhante 4271740 / como-posso-usar-python-para-obter-o-sistema-hostname

No entanto, esse problema é sutilmente diferente, afinal, até onde o usuário do meu aplicativo está ciente, o nome do host deve ser o que eles podem ver nas configurações do sistema, o que é realmente diferente. Se eu correr:

sudo scutil --get LocalHostName

Eu recebo o nome como mostrado nas configurações do sistema (em compartilhamento, onde mostra de maneira confusa o nome do computador e o nome do host local, que também podem ser diferentes). O nome do host local é mostrado com uma declaração qualificada:

s computadores da rede local podem acessar o computador em: foo.local

A razão de tudo isso ser um problema é que meu aplicativo usa o nome do host, que é diferente do nome do host local e do computador em um mac. Esse nome de host aparece na nossa interface do usuário e, obviamente, não é útil para identificar o computador do usuário quando ele está no formato '192-168-1-4.tpgi.com.au'. O usuário provavelmente espera ver o nome do computador, pois isso é visível. Em um Mac, o nome do host não é visível, pode ser configurado ou obtido com comandos, mas não é algo que nossos usuários pensariam naturalmente se enfrentassem esse problem

Soluçã

Então, o problema está relacionado à forma como os macs são configurados imediatamente. O nome do host pode ser consultado em um mac usando o seguinte comando no terminal:

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

que retornará o nome do host realmente usado para resolver o endereço IP. Como mencionei acima, isso não corresponde ao nome do computador, o que tende a causar confusão ao usar nosso aplicativo. Quando executei a seguinte consulta, descobri isso.

sudo scutil --get HostName
HostName: not set

Então, usei o seguinte comando para definir o nome do host como algo que reconheço para a máquina assi

sudo scutil --set HostName foo

gora, quando executo os seguintes comandos, obtenho o resultado que eu e outros usuários menos técnicos esperamo

import socket
socket.gethostname()
foo

import platform
platform.node()
foo

e, finalmente, apenas por uma boa medida, a partir do terminal eu corri

hostname
foo

Conclusã

Ok, então, enquanto escrevi que encontrei uma solução, não é realmente a solução que preciso, o problema é que preciso exibir o nome do computador que o usuário definiu e reconhecerá em vez do nome do host. Como estou usando python, eu realmente gostaria de encontrar um comando python para mac que pudesse encontrar o nome do computador, não o nome do host. Portanto, se alguém souber uma maneira limpa e sustentável de fazer isso (eu preferiria não ter que executar um comando shell e analisar sua saída), ficaria muito grato! Seria ótimo se esse mesmo comando (ou função) também fosse executado em outros tipos de SO, como Windows e Linux, mas eu aceitei que isso é algo do Mac, pelo menos até onde eu se

nquanto isso, espero que o descrito acima ajude se mais alguém tiver problemas semelhantes:)

Obrigado

questionAnswers(1)

yourAnswerToTheQuestion