Respuestas:
Uso socket
y su gethostname()
funcionalidad. Esto obtendrá la hostname
de la computadora donde se ejecuta el intérprete de Python:
import socket
print(socket.gethostname())
socket.getfqdn()
Ambos son bastante portátiles:
import platform
platform.node()
import socket
socket.gethostname()
Cualquier solución utilizando las HOST
o HOSTNAME
variables de entorno no son portátiles. Incluso si funciona en su sistema cuando lo ejecuta, puede no funcionar cuando se ejecuta en entornos especiales 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]
debería ser multiplataforma y admitir variables de entorno si existen, lo que permite cierto control del usuario en circunstancias exigentes, por ejemploHOSTNAME=correct python xyz.py
Probablemente cargará el módulo os de todos modos, por lo que otra sugerencia sería:
import os
myhost = os.uname()[1]
os
módulo. No es portátil y no es realmente preciso, pero útil de todos modos.
platform.uname()[1]
, que funciona en Windows.
Qué pasa :
import platform
h = platform.uname()[1]
En realidad, es posible que desee ver todos los resultados en platform.uname()
os.getenv('HOSTNAME')
y os.environ['HOSTNAME']
no siempre funcionan En trabajos cron y WSDL, HTTP HOSTNAME no está configurado. Use esto en su lugar:
import socket
socket.gethostbyaddr(socket.gethostname())[0]
Siempre (incluso en Windows) devuelve un nombre de host totalmente calificado, incluso si definió un alias corto en / etc / hosts .
Si ha definido un alias en / etc / hosts y luego socket.gethostname()
regresarán el alias. platform.uname()[1]
hace lo mismo
Me encontré con un caso donde lo anterior no funcionó. Esto es lo que estoy usando ahora:
import socket
if socket.gethostname().find('.')>=0:
name=socket.gethostname()
else:
name=socket.gethostbyaddr(socket.gethostname())[0]
Primero llama a gethostname para ver si devuelve algo que se parece a un nombre de host, si no, usa mi solución original.
socket.getfqdn()
, aunque no es lo que pide el OP
Desde al menos python> = 3.3 :
Puede usar el campo nodename
y evitar usar la indexación de matriz:
os.uname().nodename
Aunque, incluso la documentación de os.uname sugiere usarsocket.gethostname()
En algunos sistemas, el nombre de host se establece en el entorno. Si ese es su caso, el módulo os puede sacarlo del entorno a través de os.getenv . Por ejemplo, si HOSTNAME es la variable de entorno que contiene lo que desea, lo obtendrá:
import os
system_name = os.getenv('HOSTNAME')
Actualización: como se señaló en los comentarios, esto no siempre funciona, ya que no todos los entornos están configurados de esta manera. Creo que en el momento en que inicialmente respondí esto estaba usando esta solución, ya que era lo primero que encontré en una búsqueda en la web y funcionó para mí en ese momento. Debido a la falta de portabilidad, probablemente no usaría esto ahora. Sin embargo, estoy dejando esta respuesta para fines de referencia. FWIW, elimina la necesidad de otras importaciones si su entorno tiene el nombre del sistema y ya está importando el módulo os. Pruébelo: si no funciona en todos los entornos en los que espera que funcione su programa, utilice una de las otras soluciones proporcionadas.
Necesitaba el nombre de la PC para usar en mi archivo de configuración PyLog, y la biblioteca de sockets no está disponible, pero la biblioteca os sí.
Para Windows utilicé:
os.getenv('COMPUTERNAME', 'defaultValue')
Donde defaultValue es una cadena para evitar que se devuelva None
Tienes que ejecutar esta línea de código
sock_name = socket.gethostname()
Y luego puedes usar el nombre para encontrar el addr:
print(socket.gethostbyname(sock_name))