我在我的网络中有几台运行Python脚本的Windows计算机。根据运行该脚本的计算机不同,应使用不同的配置选项。
如何在Python脚本中获取该计算机的名称?
假设脚本正在名为DARK-TOWER的计算机上运行,我想编写类似于以下内容的代码:
>>> python.library.get_computer_name()
'DARK-TOWER'
有没有标准的或第三方库可以使用?
我在我的网络中有几台运行Python脚本的Windows计算机。根据运行该脚本的计算机不同,应使用不同的配置选项。
如何在Python脚本中获取该计算机的名称?
假设脚本正在名为DARK-TOWER的计算机上运行,我想编写类似于以下内容的代码:
>>> python.library.get_computer_name()
'DARK-TOWER'
有没有标准的或第三方库可以使用?
事实证明有三个选项(包括之前已经回答的两个):
>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME'] # WORK ONLY ON WINDOWS
'DARK-TOWER'
import socket
socket.gethostname()
platform.node()
也是跨平台的 - Dmitry Dronovos
则不行。 - Chau Pham来自https://mail.python.org/pipermail/python-list/2006-April/397494.html
import os
os.getenv('COMPUTERNAME')
None
。有趣的是,在bash中,HOSTNAME
是一个已定义的环境变量,但是os.getenv('HOSTNAME')
也返回None
,而socket.gethostname()
则返回正确的字符串。 - Matt Hancock正如Eric Palakovich Carr所说,你可以使用这三个变体。
我更喜欢同时使用它们:
def getpcname():
n1 = platform.node()
n2 = socket.gethostname()
n3 = os.environ["COMPUTERNAME"]
if n1 == n2 or n1 == n3:
return n1
elif n2 == n3:
return n2
else:
raise Exception("Computernames are not equal to each other")
开发跨平台应用程序时,我更喜欢确保一切万无一失 ;)
如果 n1==n2 或者 n2==n3:
返回 n1
elif n2==n3:
返回 n2
else:
抛出异常("计算机名称彼此不相等")
- Charles Plager如果 n1==n2 或者 n1==n3: 返回 n1 elif n2==n3: 返回 n2 else: 抛出异常("计算机名称不相等")
(n1
替换 n2
) - dexteritas由于Python脚本肯定是运行在Windows系统上的,因此您应该使用Win32 API GetComputerName或GetComputerNameEx。
您可以获取完全限定的DNS名称、NETBIOS名称或多种不同的内容。
import win32api
win32api.GetComputerName()
>>'MYNAME'
或者:
import win32api
WIN32_ComputerNameDnsHostname = 1
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)
>> u'MYNAME'
import socket
pc = socket.gethostname()
print pc
socket.gethostname()
返回 libc 库中的gethostname()
,而platform.node()
返回platform.uname()[1]
,后者与调用 libc 库中的uname()
的os.uname()
有些相关。看起来它们可能会得到相同的结果,但是它们采取了截然不同的方法,我不会指望在不同的平台上这两个值相同。请注意,以上是对原文的翻译,并未对技术内容进行解释或更改。 - Peter Gibsonos.environ['COMPUTERNAME']
返回的字符串全部为大写,而platform.node()
和socket.gethostname()
返回的字符串可能包含大小写混合的字符。 - MrNoob