138 Stimmen

Name des Windows-Computers ermitteln, auf dem das Python-Skript läuft?

Ich habe ein paar Windows-Computer in meinem Netzwerk, auf denen ein Python-Skript ausgeführt werden soll. Je nachdem, auf welchem Computer das Skript ausgeführt wird, sollten unterschiedliche Konfigurationsoptionen im Skript verwendet werden.

Wie kann ich den Computernamen in das Python-Skript eingeben?

Nehmen wir an, das Skript würde auf einem Computer namens DARK-TOWER laufen, dann würde ich gerne etwas in der Art schreiben:

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

Gibt es eine Standard- oder Drittanbieterbibliothek, die ich verwenden kann?

228voto

Eric Palakovich Carr Punkte 21678

Es gibt drei Möglichkeiten (einschließlich der beiden, die bereits beantwortet wurden):

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

22 Stimmen

Die Beantwortung der eigenen Frage mag von einigen als geschmacklos empfunden werden, ist aber gemäß den FAQ völlig in Ordnung: stackoverflow.com/faq

12 Stimmen

Ich finde das gar nicht so schlecht, da Eric einige verschiedene Antworten in einer einzigen Ressource zusammengefasst hat, ganz zu schweigen von der Hinzufügung einer neuen Ressource (Plattform).

7 Stimmen

Ok, das schreit nach einer Fortsetzung: Was ist der Unterschied zwischen platform.node() und socket.gethostname()? können sie überhaupt unterschiedlich sein?

50voto

brettkelly Punkte 26581
import socket
socket.gethostname()

2 Stimmen

+1 dafür, dass dies der beste Weg ist. Es ist der effektivste plattformübergreifende Aufruf.

1 Stimmen

platform.node() ist auch plattformübergreifend

0 Stimmen

Computername und Hostname sind zwei verschiedene Dinge. Wenn Sie zum Beispiel in einem VPN sind, ist Ihr Hostname X und Ihr Computername kann Y sein. Diese Antwort ist nicht richtig, da die Frage nach dem COMPUTER-Namen und nicht nach dem Hostnamen lautet.

24voto

oneporter Punkte 2894

7 Stimmen

Das funktioniert bei mir unter OS-X 10.6.8 mit Python 2.7.2 nicht, es gibt None zurück. Die anderen beschriebenen Methoden funktionieren jedoch.

2 Stimmen

@PeterGibson Das Gleiche ist mir auch schon unter Ubuntu 12.04 passiert.

0 Stimmen

Rückgabe None für mich auf Ubuntu 16.04. Interessant, HOSTNAME ist eine definierte Umgebungsvariable in der Bash, aber beide os.getenv('HOSTNAME') gibt zurück. None auch, wenn socket.gethostname() gibt die richtige Zeichenfolge zurück.

18voto

Faminator Punkte 858

Wie Eric Palakovich Carr sagte, können Sie diese drei Varianten verwenden.

Ich verwende sie am liebsten zusammen:

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

Ich bevorzuge es bei der Entwicklung von Cross-Patform-Anwendungen, um sicher zu sein ;)

1 Stimmen

Nur ein bisschen sauberer: if n1==n2 oder n2==n3: return n1 elif n2==n3: return n2 else: raise Exception("Computernamen sind nicht gleich")

2 Stimmen

@CharlesPlager So sollte es sein: if n1==n2 or n1==n3: return n1 elif n2==n3: return n2 else: raise Exception("Computer names are not equal to each other") ( n1 anstelle von n2 )

0 Stimmen

@dexteritas: Sie haben recht. (Aus irgendeinem Grund lässt es mich nicht bearbeiten).

8voto

Brian R. Bondy Punkte 325712

Da die Python-Skripte mit Sicherheit auf einem Windows-System ausgeführt werden, sollten Sie die Win32-API verwenden GetComputerName o GetComputerNameEx

Sie können den voll qualifizierten DNS-Namen, den NETBIOS-Namen oder eine Vielzahl anderer Angaben erhalten.

import win32api
win32api.GetComputerName()

>>'MYNAME'

Oder:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X