Erhalten Sie den Namen des Windows-Computers, auf dem das Python-Skript ausgeführt wird?


93

Grundsätzlich habe ich ein paar Windows-Computer in meinem Netzwerk, auf denen ein Python-Skript ausgeführt wird. Je nachdem, auf welchem ​​Computer dieses Skript ausgeführt wird, sollten im Skript unterschiedliche Konfigurationsoptionen verwendet werden.

Wie würde ich diesen Computernamen im Python-Skript erhalten?

Angenommen, das Skript wurde auf einem Computer namens DARK-TOWER ausgeführt. Ich möchte so etwas schreiben:

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

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

Antworten:


159

Es stellt sich heraus, dass es drei Optionen gibt (einschließlich der beiden bereits zuvor beantworteten):

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

16
Die Beantwortung der eigenen Frage kann von manchen als geschmacklos angesehen werden, ist jedoch gemäß den häufig gestellten Fragen
Stephan202,

9
Ich denke nicht, dass es überhaupt schlecht ist, da Eric ein paar verschiedene Antworten in einer einzigen Ressource zusammengefasst hat, ganz zu schweigen vom Hinzufügen einer neuen (Plattform).
Nilamo

4
ok, das schreit nach einem Follow-up: Was ist der Unterschied zwischen platform.node () und socket.gethostname ()? können sie jemals anders sein?
Jason S

4
Auf POSIX - Systemen, socket.gethostname()gibt die libc gethostname(), während platform.node()Erträge , platform.uname()[1]die mit etwas verwandt ist os.uname(), um die libc nennt uname()... Es sieht aus wie sie an der gleichen Stelle enden könnte, aber sie nehmen ganz unterschiedliche Wege dorthin zu kommen , und ich würde nicht verlassen auf den Wert, auf verschiedenen Plattformen gleich zu sein.
Peter Gibson

5
Es ist erwähnenswert, dass os.environ['COMPUTERNAME']alle Großbuchstaben zurückgegeben werden, während gemischte Groß- platform.node()und socket.gethostname()Kleinschreibung zurückgegeben werden können.
MrNoob


20

5
Dies funktioniert unter OS-X 10.6.8 mit Python 2.7.2 nicht, es wird None zurückgegeben. Die anderen beschriebenen Methoden funktionieren jedoch.
Peter Gibson

2
@PeterGibson Ich hatte das gleiche Problem mit Ubuntu 12.04.
Daniel F

Gibt Nonefür mich unter Ubuntu 16.04 zurück. Interessanterweise HOSTNAMEist eine definierte Umgebungsvariable in der Bash, aber beide os.getenv('HOSTNAME')kehrt Noneauch, während socket.gethostname()kehrt die richtige Zeichenfolge.
Matt Hancock

12

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

Ich benutze sie lieber 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
Nur ein bisschen sauberer: wenn n1 == n2 oder n2 == n3: n1 zurückgeben elif n2 == n3: n2 zurückgeben else: Ausnahme auslösen ("Computernamen sind nicht gleich")
Charles Plager

2
@CharlesPlager Es sollte 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")( n1statt n2)
dexteritas

@dexteritas: Du bist richtig. (Ich kann es aus irgendeinem Grund nicht bearbeiten).
Charles Plager

6

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

Sie können den vollständig qualifizierten DNS-Namen oder NETBIOS-Namen oder eine Vielzahl verschiedener Dinge erhalten.

import win32api
win32api.GetComputerName()

>>'MYNAME'

Oder:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'


0
import socket
pc = socket.gethostname()
print pc

6
Bitte fügen Sie der Antwort immer eine Erklärung hinzu.
DaFois

Außerdem ist diese Antwort nur eine Kopie einer 10 Jahre alten, hoch bewerteten anderen Antwort .
Wovano
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.