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