Python в Linux: получить имя хоста в / etc / hostname - PullRequest
9 голосов
/ 25 ноября 2011

Из скрипта Python я пытаюсь получить имя хоста в окне Linux.Это экземпляр Debian GNU / Linux Amazon EC2.Я установил правильное имя в /etc/hostname.Рекомендованное решение socket.gethostname() не работает: оно показывает ip- плюс IP-кортеж.

Я искал в StackOverflow и ничего не выходит, например, здесь .socket.getfqdn() еще хуже: он выдает ip-[IP tuple].eu-west-1.compute.internal.

Я что-то делаю не так или нет чистого решения для получения имени хоста в /etc/hostname?Конечно, резервным решением является чтение самого файла etc/hostname, но что-то настолько зависимое от платформы, слишком аберрантно.Спасибо!

Ответы [ 4 ]

13 голосов
/ 25 ноября 2011

Попробуйте os.uname().Согласно документу , это вторая позиция в возвращаемом кортеже.

Но, как утверждает сам документ, "лучший способ получить имя хоста - это socket.gethostname() или даже socket.gethostbyaddr(socket.gethostname()) ".

7 голосов
/ 28 ноября 2011

Прежде всего, весь кредит должен идти на m1k3y02, который дал мне подсказку в комментарии.Теперь, ради ради потомков , я дам правильный ответ: мой Amazon EC2 долгое время не перезагружался.Я установил имя хоста в /etc/hostname, но оно не дошло до системы, о чем свидетельствует uname -n.Так что просто запуск /etc/init.d/hostname.sh сделал свое дело.После этого socket.gethostname() работал как задумано.

Урок здесь: сначала посмотрите, получает ли система его, и только после этого обвиняет язык.

7 голосов
/ 25 ноября 2011

Общий источник для имени хоста: hostname (1) . Эта программа вызывает эквивалент uname -n.

В Python вы можете использовать platform.node() или os.uname()[1].

5 голосов
/ 25 ноября 2011

Вы пробовали socket.gethostbyaddr(socket.gethostname())?

...