Zasadniczo mam kilka komputerów z systemem Windows w mojej sieci, na których będzie działać skrypt w języku Python. W skrypcie należy użyć innego zestawu opcji konfiguracyjnych w zależności od tego, na którym komputerze jest uruchamiany skrypt.
Jak uzyskać nazwę komputera w skrypcie Pythona?
Powiedzmy, że skrypt był uruchomiony na komputerze o nazwie DARK-TOWER, chciałbym napisać coś takiego:
>>> python.library.get_computer_name()
'DARK-TOWER'
Czy istnieje biblioteka standardowa lub innej firmy, z której mogę skorzystać?
python
windows
networking
Eric Palakovich Carr
źródło
źródło
socket.gethostname()
zwraca libcgethostname()
, podczas gdyplatform.node()
zwroty,platform.uname()[1]
które są w pewnym stopniu związane zos.uname()
tym, z którymi wywołuje libcuname()
... Wygląda na to, że mogą skończyć się w tym samym miejscu, ale podążają zupełnie innymi ścieżkami, aby się tam dostać i nie mógłbym polegać aby wartość była taka sama na różnych platformach.os.environ['COMPUTERNAME']
zwróci wszystkie wielkie litery, podczas gdyplatform.node()
isocket.gethostname()
może zwrócić mieszaną wielkość liter.import socket socket.gethostname()
źródło
Od https://mail.python.org/pipermail/python-list/2006-April/397494.html
import os os.getenv('COMPUTERNAME')
źródło
None
dla mnie na Ubuntu 16.04. Co ciekawe,HOSTNAME
jest zmienną środowiskową zdefiniowaną w bash, ale obieos.getenv('HOSTNAME')
zwracająNone
również, podczas gdysocket.gethostname()
zwracają poprawny ciąg.Jak powiedział Eric Palakovich Carr, możesz użyć tych trzech wariantów.
Wolę używać ich razem:
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")
Wolę to przy tworzeniu aplikacji cross-patform dla pewności;)
źródło
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
zamiastn2
)Ponieważ skrypty Pythona z pewnością działają w systemie Windows, należy użyć interfejsu API Win32 GetComputerName lub GetComputerNameEx
Możesz uzyskać w pełni kwalifikowaną nazwę DNS lub nazwę NETBIOS lub wiele różnych rzeczy.
import win32api win32api.GetComputerName() >>'MYNAME'
Lub:
import win32api WIN32_ComputerNameDnsHostname = 1 win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname) >> u'MYNAME'
źródło
Założę się, że gethostname będzie działać pięknie.
źródło
import socket pc = socket.gethostname() print pc
źródło