Pobieranie nazwy komputera z systemem Windows z uruchomionym skryptem Pythona?

Zasadniczo, mam kilka komputerów z systemem Windows w mojej sieci, które będą uruchamiać skrypt Pythona. W skrypcie należy zastosować inny zestaw opcji konfiguracyjnych, w zależności od komputera, na którym skrypt jest uruchomiony.

Skąd miałbym wziąć nazwę komputera w skrypcie Pythona?

Powiedzmy, że skrypt działał na komputerze o nazwie DARK-TOWER, chciałbym napisać coś takiego:

>>> python.library.get_computer_name()
'DARK-TOWER'

Czy istnieje standardowa lub trzecia biblioteka, z której mogę korzystać?

Author: Eric Palakovich Carr, 2009-04-29

6 answers

Okazuje się, że są trzy opcje (w tym dwie już wcześniej):

>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'
 118
Author: Eric Palakovich Carr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-12 14:18:04
import socket
socket.gethostname()
 24
Author: inkedmn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-28 20:53:25
 13
Author: oneporter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-23 00:13:47

Jak powiedział Eric 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ę przy tworzeniu aplikacji cross patform mieć pewność ;)

 7
Author: Faminator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-13 17:29:57

Ponieważ skrypty Pythona na pewno działają w systemie windows, powinieneś użyć 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'
 6
Author: Brian R. Bondy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-28 21:27:38

Założę się, że gethostname będzie działać pięknie.

 3
Author: Promit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-28 20:51:15