2009-04-28 13 views
56

Zasadniczo mam kilka komputerów z systemem Windows w mojej sieci, które będą uruchamiać skrypt Pythona. W skrypcie powinien być używany inny zestaw opcji konfiguracji, w zależności od tego, na którym komputerze uruchomiony jest ten skrypt.Uzyskiwanie nazwy komputera Windows z uruchomionym skryptem Pythona?

Jak uzyskać tę nazwę komputera w skrypcie Pythona?

Powiedzmy skrypt został uruchomiony na komputerze o nazwie Dark-TOWER, chciałbym napisać coś takiego:

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

istnieje norma lub trzeci biblioteki strona może używać?

Odpowiedz

104

Okazuje się, że są trzy opcje (w tym dwie już odpowiedział wcześniej):

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

Udzielenie odpowiedzi na własne pytanie może być uważane przez niektórych za kiepski, ale jest idealnie w porządku, jak na FAQ: http://stackoverflow.com/faq – Stephan202

+7

Nie sądzę, że to jest złe, ponieważ Eric kompilował kilka różne odpowiedzi na pojedynczy zasób, nie wspominając o dodaniu nowego (platforma). – nilamo

+3

ok, więc to woła o kontynuację: jaka jest różnica między platform.node() i socket.gethostname()? czy mogą być kiedykolwiek inni? –

2

Założę się, że gethostname będzie działać pięknie.

+0

Promit z GameDev? Dzięki za odpowiedź :) –

+1

To samo. Dostałem wystarczająco dużo odpowiedzi od SO, które myślałem, że powinienem wnieść wkład. – Promit

5

Ponieważ scrips python są na pewno działa na systemie Windows, należy użyć API Win32 GetComputerName lub GetComputerNameEx

można uzyskać pełną nazwę DNS lub nazwę NetBIOS lub wiele różnych rzeczy.

import win32api 
win32api.GetComputerName() 

>>'MYNAME' 

Lub:

import win32api 
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname) 

>> u'MYNAME' 
11
+3

Dziękuję wszystkim za odpowiedzi. Wszystkie działają dobrze, więc wybrałem osobę o najniższej ocenie. –

+3

To nie działa dla mnie na OS-X 10.6.8 przy użyciu Pythona 2.7.2, zwraca None. Inne opisane metody działają jednak. –

+1

@PeterGibson Miałem to samo, co zdarzało mi się na Ubuntu 12.04. –

18
import socket 
socket.gethostname() 
+1

+1 za to, że jest to najlepsza droga. Jest to najbardziej skuteczne połączenie między platformami. – joshin4colours

4

Jak Eric Carr powiedział, że możesz użyć tych trzech wariantów.

Wolę stosując je razem:

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") 

Wolę go przy opracowywaniu wniosków krzyżowe patform mieć pewność;)

+0

Wystarczy nieco czystsze: jeśli N1 N2 lub N2 == == N3: powrót n1 Elif N2 == N3: powrót n2 else: raise Exception ("Nazwy komputerów nie są sobie równe") –

+1

@CharlesPlager Powinien to być: 'if n1 == n2 lub n1 == n3: return n1 elif n2 == n3: return n2 else: raise Exception (" Nazwy komputerów nie są sobie równe ")' ('n1' zamiast 'n2') – dexteritas

+0

@dexteritas: Masz rację. (Nie pozwoli mi tego edytować z jakiegokolwiek powodu). –

Powiązane problemy