133 votes

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

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

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

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

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

Existe-t-il une bibliothèque standard ou d'un tiers que je peux utiliser ?

218voto

Eric Palakovich Carr Points 5487

Je sais qu'il est de mauvais goût de poster une réponse à sa propre question, mais il s'avère qu'il y a trois options (dont 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'

22 votes

Répondre à sa propre question peut être considéré comme de mauvais goût par certains, mais c'est parfaitement acceptable, conformément à la FAQ : stackoverflow.com/faq

12 votes

Je ne pense pas que ce soit mauvais du tout, puisque Eric compilait plusieurs réponses différentes en une seule ressource, sans compter qu'il en ajoutait une nouvelle (la plateforme).

7 votes

Ok, ceci appelle un suivi : quelle est la différence entre platform.node() et socket.gethostname() ? peuvent-ils jamais être différents ?

49voto

inkedmn Points 12655
import socket
socket.gethostname()

2 votes

+1 pour que ce soit la meilleure façon de faire. C'est l'appel multi-plateforme le plus efficace.

1 votes

platform.node() est également multiplateforme

23voto

oneporter Points 672

7 votes

Cela ne fonctionne pas pour moi sur OS-X 10.6.8 en utilisant Python 2.7.2, cela renvoie None. Les autres méthodes décrites fonctionnent cependant.

2 votes

@PeterGibson La même chose m'est arrivée sur Ubuntu 12.04.

0 votes

Renvoie à None pour moi sur Ubuntu 16.04. Intéressant, HOSTNAME est une variable d'environnement définie dans bash, mais à la fois os.getenv('HOSTNAME') renvoie à None également, alors que socket.gethostname() renvoie la chaîne correcte.

8voto

Brian R. Bondy Points 141769

Comme 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 entièrement qualifié, ou 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'

3voto

Promit Points 2739

Je parie gethostname fonctionnera à merveille.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X