Réponses:
Utilisation socket
et ses gethostname()
fonctionnalités. Cela obtiendra l' hostname
ordinateur sur lequel s'exécute l'interpréteur Python:
import socket
print(socket.gethostname())
socket.getfqdn()
Les deux sont assez portables:
import platform
platform.node()
import socket
socket.gethostname()
Les solutions utilisant les variables d'environnement HOST
ou HOSTNAME
ne sont pas portables. Même s'il fonctionne sur votre système lorsque vous l'exécutez, il peut ne pas fonctionner lorsqu'il est exécuté dans des environnements spéciaux tels que cron.
python -m timeit "import socket; socket.gethostname()" 10000 loops, best of 3: 76.3 usec per loop
python -m timeit "import platform; platform.node()" 1000000 loops, best of 3: 0.74 usec per loop
import os, platform; os.getenv('HOSTNAME', os.getenv('COMPUTERNAME', platform.node())).split('.')[0]
devrait être multiplateforme et prendre en charge les variables d'environnement si elles existent - ce qui permet un certain contrôle de l'utilisateur dans des situations d'urgence, par exempleHOSTNAME=correct python xyz.py
Vous allez probablement charger le module os de toute façon, donc une autre suggestion serait:
import os
myhost = os.uname()[1]
os
module. Pas portable et pas vraiment précis, mais pratique quand même.
platform.uname()[1]
, qui fonctionne sur Windows.
Qu'en est-il de :
import platform
h = platform.uname()[1]
En fait, vous voudrez peut-être jeter un œil à tous les résultats platform.uname()
os.getenv('HOSTNAME')
et os.environ['HOSTNAME']
ne fonctionnent pas toujours. Dans les tâches cron et WSDL, HTTP HOSTNAME n'est pas défini. Utilisez-le à la place:
import socket
socket.gethostbyaddr(socket.gethostname())[0]
Il retourne toujours (même sous Windows) un nom d'hôte complet, même si vous avez défini un court alias dans / etc / hosts .
Si vous avez défini un alias dans / etc / hosts, puis socket.gethostname()
retournera l'alias. platform.uname()[1]
fait la même chose.
J'ai rencontré un cas où ce qui précède n'a pas fonctionné. Voici ce que j'utilise maintenant:
import socket
if socket.gethostname().find('.')>=0:
name=socket.gethostname()
else:
name=socket.gethostbyaddr(socket.gethostname())[0]
Il appelle d'abord gethostname pour voir s'il renvoie quelque chose qui ressemble à un nom d'hôte, sinon il utilise ma solution d'origine.
socket.getfqdn()
, mais ce n'est pas ce que l'OP demande
Depuis au moins python> = 3.3 :
Vous pouvez utiliser le champ nodename
et éviter d'utiliser l'indexation de tableaux:
os.uname().nodename
Même si la documentation d' os.uname suggère d'utilisersocket.gethostname()
Sur certains systèmes, le nom d'hôte est défini dans l'environnement. Si tel est le cas pour vous, le module os peut le retirer de l'environnement via os.getenv . Par exemple, si HOSTNAME est la variable d'environnement contenant ce que vous voulez, les éléments suivants l'obtiendront:
import os
system_name = os.getenv('HOSTNAME')
Mise à jour: Comme indiqué dans les commentaires, cela ne fonctionne pas toujours, car l'environnement de tout le monde n'est pas configuré de cette façon. Je crois qu'au moment où j'ai répondu au départ, j'utilisais cette solution car c'était la première chose que j'avais trouvée dans une recherche sur le Web et cela a fonctionné pour moi à l'époque. En raison du manque de portabilité, je ne l'utiliserais probablement pas maintenant. Cependant, je laisse cette réponse à des fins de référence. FWIW, cela élimine le besoin d'autres importations si votre environnement a le nom du système et que vous importez déjà le module os. Testez-le - s'il ne fonctionne pas dans tous les environnements dans lesquels vous prévoyez que votre programme fonctionnera, utilisez l'une des autres solutions fournies.
J'avais besoin du nom du PC à utiliser dans mon fichier de configuration PyLog, et la bibliothèque de sockets n'est pas disponible, mais la bibliothèque os l'est.
Pour Windows, j'ai utilisé:
os.getenv('COMPUTERNAME', 'defaultValue')
Où defaultValue est une chaîne pour empêcher Aucun d'être renvoyé
Vous devez exécuter cette ligne de code
sock_name = socket.gethostname()
Et puis vous pouvez utiliser le nom pour trouver l'adr:
print(socket.gethostbyname(sock_name))