web-dev-qa-db-fra.com

Obtenir le nom de l'ordinateur Windows exécutant le script python?

Fondamentalement, j'ai quelques ordinateurs Windows sur mon réseau qui exécuteront un script python. Un ensemble différent d'options de configuration doit être utilisé dans le script en fonction de l'ordinateur qui exécute ce script.

Comment puis-je obtenir ce nom d'ordinateur dans le script python?

Disons que le script s'exécutait sur un ordinateur nommé DARK-TOWER, je voudrais écrire quelque chose comme ceci:

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

Existe-t-il une bibliothèque standard ou tierce que je peux utiliser?

75

Il s'avère qu'il existe trois options (y compris les deux déjà répondues précédemment):

>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'
133
import socket
socket.gethostname()
26
inkedmn
16
oneporter

Comme l'a dit Eric Palakovich Carr, vous pouvez utiliser ces trois variantes.

Je préfère les utiliser ensemble:

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

Je le préfère lors du développement d'applications cross-patform pour être sûr;)

8
Faminator

Étant donné que les scripts python sont certainement exécutés sur un système Windows, vous devez utiliser l'API Win32 GetComputerName ou GetComputerNameEx

Vous pouvez obtenir le nom DNS complet, le nom NETBIOS ou une variété de choses différentes.

import win32api
win32api.GetComputerName()

>>'MYNAME'

Ou:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'
6
Brian R. Bondy

Je parie que gethostname fonctionnera à merveille.

3
Promit