los - python tutorial
¿Cómo puedo usar Python para obtener el nombre de host del sistema? (10)
Estoy escribiendo un programa de chat para una red local. Me gustaría poder identificar computadoras y obtener el nombre de computadora configurado por el usuario con Python.
Ambos son bastante portátiles:
import platform
platform.node()
import socket
socket.gethostname()
Cualquier solución que utilice las variables de entorno HOST
o HOSTNAME
no es portátil. Incluso si funciona en su sistema cuando lo ejecuta, es posible que no funcione cuando se ejecuta en entornos especiales como cron.
De al menos python> = 3.3 :
Puede usar el campo nombre de nodename
y evitar usar la indexación de matriz:
os.uname().nodename
Aunque, incluso la documentación de os.uname sugiere usar socket.gethostname()
En algunos sistemas, el nombre de host se establece en el entorno. Si ese es su caso, el módulo os puede extraerlo del entorno a través de os.getenv . Por ejemplo, si HOSTNAME es la variable de entorno que contiene lo que desea, lo siguiente 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 se configuran de esta manera. Creo que en el momento en que respondí esto inicialmente, estaba usando esta solución, ya que era lo primero que había encontrado en una búsqueda 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, use una de las otras soluciones provistas.
Necesitaba el nombre de la PC para usar en mi archivo de configuración de PyLog, y la biblioteca de socket no está disponible, pero la biblioteca de OS sí.
Para Windows utilicé:
os.getenv(''COMPUTERNAME'', ''defaultValue'')
Donde defaultValue es una cadena para evitar que Ninguno se devuelva
Probablemente cargará el módulo os de todos modos, por lo que otra sugerencia sería:
import os
myhost = os.uname()[1]
Qué pasa :
import platform
h = platform.uname()[1]
En realidad, es posible que desee ver todos los resultados en platform.uname()
Si estoy en lo cierto, estás buscando la función socket.gethostname:
>> import socket
>> socket.gethostname()
''terminus''
os.getenv(''HOSTNAME'')
y os.environ[''HOSTNAME'']
no siempre funcionan. En los 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 completo, incluso si ha definido un alias corto en / etc / hosts .
Si definió un alias en / etc / hosts , socket.gethostname()
devolverá 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.gethostname()
podría hacer
Usa socket
y su funcionalidad gethostname()
. Esto obtendrá el hostname
de hostname
de la computadora donde se ejecuta el intérprete de Python:
import socket
print(socket.gethostname())