877 votes

Comment puis-je utiliser python pour obtenir le nom d'hôte du système?

Note: je ne PAS dire "windows XP", "Linux", "OS X", etc.

Je suis en train d'écrire un programme de chat pour un réseau local. Je voudrais savoir qui dit quoi, donc je voudrais l'utiliser python pour obtenir de l'utilisateur-définir le nom de l'ordinateur. Le nom de l'ordinateur lorsque vous affichez le réseau local. par exemple, "Portable", "Jean", etc. Toutes les suggestions?

Une autre remarque: Le réseau est déjà en place (partage de fichiers, VNC, etc). Je n'ai pas besoin d'aide avec ça.

1334voto

Alex Points 21247

Utiliser socket et son gethostname() fonctionnalités. Cette obtiendrez de l' hostname de l'ordinateur sur lequel l'interpréteur python est en cours d'exécution:

import socket
print(socket.gethostname())

458voto

robert Points 10493

Ces deux sont assez portable:

import platform
platform.node()

import socket
socket.gethostname()

Toutes les solutions à l'aide de l' HOST ou HOSTNAME variables d'environnement ne sont pas portables. Même si cela fonctionne sur votre système lorsque vous l'exécutez, il peut ne pas fonctionner lors de l'exécuter dans des environnements particuliers comme cron.

169voto

mike0042 Points 89

Vous aurez probablement charger le module os de toute façon, une autre suggestion serait:

import os
myhost = os.uname()[1]

74voto

Lucien Hercaud Points 89

Ce sujet :

import platform

h = platform.uname()[1]

En fait, vous voudrez peut-être avoir un coup d'oeil à tous les résultats en platform.uname()

64voto

Tom Ekberg Points 269

os.getenv('HOSTNAME') et os.environ['HOSTNAME'] ne fonctionnent pas toujours. Dans cron jobs et WSDL, HTTP nom d'hôte n'est pas définie. Utilisez ceci à la place:

import socket
socket.gethostbyaddr(socket.gethostname())[0]

Il a toujours (même sous Windows) retourne un nom d'hôte pleinement qualifié, même si vous avez défini un alias dans /etc/hosts.

Si vous avez défini un alias dans /etc/hosts puis, socket.gethostname() sera de retour l'alias. platform.uname()[1] fait la même chose.

J'ai couru dans un cas où le ci-dessus ne fonctionne pas. C'est 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 si elle renvoie à quelque chose qui ressemble à un nom d'hôte, si ce n'est qu'il utilise ma solution originale.

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