По сути, у меня в сети есть пара компьютеров с Windows, на которых будет запущен скрипт Python. В сценарии следует использовать другой набор параметров конфигурации в зависимости от того, на каком компьютере выполняется этот сценарий.
Как мне получить это имя компьютера в скрипте Python?
Допустим, скрипт запущен на компьютере с именем DARK-TOWER, я бы хотел написать что-то вроде этого:
>>> python.library.get_computer_name()
'DARK-TOWER'
Могу ли я использовать стандартную или стороннюю библиотеку?
python
windows
networking
Эрик Палакович Карр
источник
источник
socket.gethostname()
возвращает libcgethostname()
, аplatform.node()
возвращает,platform.uname()[1]
что в некоторой степени связано с тем,os.uname()
что вызывает libcuname()
... Похоже, они могут оказаться в одном и том же месте, но они идут совершенно разными путями, и я бы не стал полагаться значение должно быть одинаковым для разных платформ.os.environ['COMPUTERNAME']
будут возвращены все заглавные буквы, тогда какplatform.node()
иsocket.gethostname()
можно вернуть смешанный регистр.import socket socket.gethostname()
источник
Из https://mail.python.org/pipermail/python-list/2006-April/397494.html
import os os.getenv('COMPUTERNAME')
источник
None
для меня на Ubuntu 16.04. Интересно,HOSTNAME
что это определенная переменная среды в bash, но обе они такжеos.getenv('HOSTNAME')
возвращаютNone
, аsocket.gethostname()
возвращают правильную строку.Как сказал Эрик Палакович Карр, вы можете использовать эти три варианта.
Я предпочитаю использовать их вместе:
def getpcname(): n1 = platform.node() n2 = socket.gethostname() n3 = os.environ["COMPUTERNAME"] if n1 == n2 == n3: return n1 elif n1 == n2: return n1 elif n1 == n3: return n1 elif n2 == n3: return n2 else: raise Exception("Computernames are not equal to each other")
Я предпочитаю это при разработке приложений с перекрестными формами, чтобы быть уверенным;)
источник
if n1==n2 or n1==n3: return n1 elif n2==n3: return n2 else: raise Exception("Computer names are not equal to each other")
(n1
вместоn2
)Поскольку сценарии python наверняка работают в системе Windows, вам следует использовать Win32 API GetComputerName или GetComputerNameEx.
Вы можете получить полное DNS-имя, или имя NETBIOS, или множество других вещей.
import win32api win32api.GetComputerName() >>'MYNAME'
Или:
import win32api WIN32_ComputerNameDnsHostname = 1 win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname) >> u'MYNAME'
источник
Готов поспорить, gethostname будет прекрасно работать.
источник
import socket pc = socket.gethostname() print pc
источник