Respostas:
Use socket
e sua gethostname()
funcionalidade. Isso obterá o hostname
computador em que o interpretador Python está sendo executado:
import socket
print(socket.gethostname())
socket.getfqdn()
Ambos são bastante portáteis:
import platform
platform.node()
import socket
socket.gethostname()
Quaisquer soluções usando as variáveis de ambiente HOST
ou HOSTNAME
não são portáteis. Mesmo que funcione no seu sistema quando você o executa, pode não funcionar quando executado em ambientes especiais, como cron.
python -m timeit "import socket; socket.gethostname()" 10000 loops, best of 3: 76.3 usec per loop
python -m timeit "import platform; platform.node()" 1000000 loops, best of 3: 0.74 usec per loop
import os, platform; os.getenv('HOSTNAME', os.getenv('COMPUTERNAME', platform.node())).split('.')[0]
deve ser variáveis multi-plataforma e ambiente de suporte, se eles existem - o que permite algum controle de usuário em circunstâncias que exijam, por exemploHOSTNAME=correct python xyz.py
Você provavelmente carregará o módulo OS de qualquer maneira, então outra sugestão seria:
import os
myhost = os.uname()[1]
os
módulo. Não é portátil e não é realmente preciso, mas é útil de qualquer maneira.
platform.uname()[1]
, que funciona no Windows.
A respeito :
import platform
h = platform.uname()[1]
Na verdade, você pode querer ver todos os resultados em platform.uname()
os.getenv('HOSTNAME')
e os.environ['HOSTNAME']
nem sempre funciona. Em tarefas cron e WSDL, HTTP HOSTNAME não está definido. Use isto:
import socket
socket.gethostbyaddr(socket.gethostname())[0]
Sempre (mesmo no Windows) retorna um nome completo de host, mesmo se você definiu um alias curto em / etc / hosts .
Se você definiu um alias no / etc / hosts , socket.gethostname()
retornará o alias. platform.uname()[1]
faz a mesma coisa.
Corri para um caso em que o acima não funcionou. Isto é o que estou usando agora:
import socket
if socket.gethostname().find('.')>=0:
name=socket.gethostname()
else:
name=socket.gethostbyaddr(socket.gethostname())[0]
Primeiro chama gethostname para ver se retorna algo que se parece com um nome de host; caso contrário, ele usa minha solução original.
socket.getfqdn()
, no entanto, não é o que o OP pede
De pelo menos python> = 3.3 :
Você pode usar o campo nodename
e evitar o uso de indexação de matriz:
os.uname().nodename
Embora até a documentação do os.uname sugira o uso desocket.gethostname()
Em alguns sistemas, o nome do host é definido no ambiente. Se esse é o seu caso, o módulo os pode retirá-lo do ambiente via os.getenv . Por exemplo, se HOSTNAME é a variável de ambiente que contém o que você deseja, o seguinte será obtido:
import os
system_name = os.getenv('HOSTNAME')
Atualização: conforme observado nos comentários, isso nem sempre funciona, pois nem todo mundo é configurado dessa maneira. Acredito que, no momento em que respondi inicialmente, estava usando esta solução, pois era a primeira coisa que encontrei em uma pesquisa na web e funcionou para mim na época. Devido à falta de portabilidade, eu provavelmente não usaria isso agora. No entanto, estou deixando esta resposta para fins de referência. FWIW, elimina a necessidade de outras importações se o seu ambiente tiver o nome do sistema e você já estiver importando o módulo os. Teste - se não funcionar em todos os ambientes em que você espera que seu programa funcione, use uma das outras soluções fornecidas.
Eu precisava do nome do PC para usar no meu arquivo conf PyLog, e a biblioteca de soquetes não está disponível, mas a biblioteca os está.
Para Windows , usei:
os.getenv('COMPUTERNAME', 'defaultValue')
Onde defaultValue é uma sequência para impedir que nenhum seja retornado
Você precisa executar esta linha de código
sock_name = socket.gethostname()
E então você pode usar o nome para encontrar o endereço:
print(socket.gethostbyname(sock_name))