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