Как я могу использовать Python для получения имени системы?

Я пишу чат-программу для локальной сети. Я хотел бы иметь возможность идентифицировать компьютеры и получить имя компьютера с помощью Python.

Ответ 1

Используйте socket и gethostname() функциональность. Это получит hostname компьютера, на котором запущен интерпретатор Python:

import socket
print(socket.gethostname())

Ответ 2

Оба из них довольно портативны:

import platform
platform.node()

import socket
socket.gethostname()

Любые решения, использующие переменные среды HOST или HOSTNAME, не являются переносимыми. Даже если он работает в вашей системе при запуске, он может не работать при работе в специальных средах, таких как cron.

Ответ 3

В любом случае вы, вероятно, загрузите модуль os, поэтому еще одно предложение:

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

Ответ 4

os.getenv('HOSTNAME') и os.environ['HOSTNAME'] не всегда работают. В заданиях cron и WSDL HTTP HOSTNAME не установлен. Используйте это вместо:

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

Он всегда (даже в Windows) возвращает полное имя хоста, даже если вы определили короткий псевдоним в /etc/hosts.

Если вы определили псевдоним в /etc/hosts, то socket.gethostname() вернет псевдоним. platform.uname()[1] делает то же самое.

Я столкнулся с ситуацией, когда выше это не сработало. Это то, что я сейчас использую:

import socket
if socket.gethostname().find('.')>=0:
    name=socket.gethostname()
else:
    name=socket.gethostbyaddr(socket.gethostname())[0]

Сначала он вызывает gethostname, чтобы увидеть, возвращает ли он что-то похожее на имя хоста, если оно не использует мое исходное решение.

Ответ 5

Как насчет:

import platform

h = platform.uname()[1]

На самом деле вы можете посмотреть на весь результат в platform.uname()

Ответ 6

Если я прав, вы ищете функцию socket.gethostname:

>> import socket
>> socket.gethostname()
'terminus'

Ответ 7

socket.gethostname() мог

Ответ 8

В некоторых системах имя хоста устанавливается в среде. Если это так, os module может вывести его из среды через os.getenv. Например, если HOSTNAME - это переменная среды, содержащая то, что вы хотите, следующее ее получит:

import os
system_name = os.getenv('HOSTNAME')

Обновление. Как отмечено в комментариях, это не всегда работает, поскольку не все настройки среды настроены таким образом. Я считаю, что в то время, когда я сначала ответил на это, я использовал это решение, поскольку это было первое, что я нашел в веб-поиске, и это работало для меня в то время. Из-за отсутствия переносимости я, вероятно, не использовал бы это сейчас. Однако я оставляю этот ответ для справки. FWIW, он устраняет необходимость в других импортах, если ваша среда имеет имя системы, и вы уже импортируете модуль os. Проверьте его - если он не работает во всех средах, в которых вы ожидаете, что ваша программа будет работать, используйте один из других предоставленных решений.

Ответ 9

Мне понадобилось имя ПК для использования в моем файле конфигурации PyLog, а библиотека сокетов недоступна, но os-библиотека.

Для Windows я использовал:

os.getenv('COMPUTERNAME', 'defaultValue')

Где defaultValue - это строка для предотвращения возврата None