2009-04-28 10 views
56

Básicamente, tengo un par de computadoras con Windows en mi red que ejecutarán un script de python. Se debe usar un conjunto diferente de opciones de configuración en el script, dependiendo de qué computadora ejecute este script.Obteniendo el nombre de la computadora con Windows ejecutando la secuencia de comandos python?

¿Cómo obtendría el nombre de esa computadora en la secuencia de comandos python?

Digamos que la secuencia de comandos se ejecuta en un equipo denominado DARK-TORRE, me gustaría escribir algo como esto:

>>> python.library.get_computer_name() 
'DARK-TOWER' 

¿Hay una biblioteca estándar o un tercero que pueda usar?

Respuesta

104

Resulta que hay tres opciones (incluyendo los dos que ya respondió anterior):

>>> import platform 
>>> import socket 
>>> import os 
>>> platform.node() 
'DARK-TOWER' 
>>> socket.gethostname() 
'DARK-TOWER' 
>>> os.environ['COMPUTERNAME'] 
'DARK-TOWER' 
+11

Responder a la propia pregunta puede ser considerado de mal gusto por algunos, pero está perfectamente bien, según las preguntas frecuentes: http://stackoverflow.com/faq – Stephan202

+7

No creo que sea malo en absoluto, ya que Eric estaba compilando algunos diferentes respuestas en un único recurso, por no mencionar la adición de uno nuevo (plataforma). – nilamo

+3

bien, así que esto pide un seguimiento: ¿cuál es la diferencia entre platform.node() y socket.gethostname()? ¿Alguna vez pueden ser diferentes? –

2

apuesto gethostname funcionará maravillosamente.

+0

Promit de GameDev? Gracias por la respuesta :) –

+1

Lo mismo. Recibí suficientes respuestas de SO que pensé que debería contribuir. – Promit

5

Desde los scripts de Python son con seguridad que se ejecuta en un sistema de ventanas, se debe utilizar la API de Win32 GetComputerName o GetComputerNameEx

Usted puede obtener el nombre completo de DNS, o el nombre de NetBIOS o una variedad de cosas diferentes.

import win32api 
win32api.GetComputerName() 

>>'MYNAME' 

O:

import win32api 
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname) 

>> u'MYNAME' 
11
+3

Gracias a todos por sus respuestas. Todos funcionan bien, así que elegí a la persona con la calificación más baja. –

+3

Esto no funciona para mí en OS-X 10.6.8 usando Python 2.7.2, devuelve None. Los otros métodos descritos funcionan sin embargo. –

+1

@PeterGibson Me sucedió lo mismo en Ubuntu 12.04. –

18
import socket 
socket.gethostname() 
+1

+1 para que este sea el mejor camino a seguir. Es la llamada multiplataforma más efectiva. – joshin4colours

4

Como dijo Eric Carr, podrías usar estas tres variantes.

Yo prefiero usar juntos:

def getpcname(): 
    n1 = platform.node() 
    n2 = socket.gethostname() 
    n3 = os.environ["COMPUTERNAME"] 
    if n1 == n2 == n3: 
     return n1 
    elif n1 == n2: 
     return n1 
    elif n1 == n3: 
     return n1 
    elif n2 == n3: 
     return n2 
    else: 
     raise Exception("Computernames are not equal to each other") 

lo prefiero al desarrollar aplicaciones patform cruzadas para estar seguro;)

+0

Sólo un poco más limpia: si n1 == == N2 o N3 N2: retorno n1 n2 elif == n3: retorno n2 otra cosa: aumento de excepción ("Los nombres de equipo no son iguales entre sí") –

+1

@CharlesPlager Debería ser: 'si n1 == n2 o n1 == n3: return n1 elif n2 == n3: return n2 else: raise Exception (" Los nombres de los equipos no son iguales entre sí ")' ('n1' en lugar de 'n2') – dexteritas

+0

@dexteritas: Estás en lo correcto. (No me permitirá editarlo por la razón que sea). –

Cuestiones relacionadas