基本上,我的网络上有几台Windows计算机,这些计算机将运行python脚本。脚本中应使用一组不同的配置选项,具体取决于运行此脚本的计算机。
如何在python脚本中获取该计算机名称?
假设脚本运行在名为DARK-TOWER的计算机上,我想编写如下代码:
>>> python.library.get_computer_name()
'DARK-TOWER'
我可以使用标准库或第三方库吗?
基本上,我的网络上有几台Windows计算机,这些计算机将运行python脚本。脚本中应使用一组不同的配置选项,具体取决于运行此脚本的计算机。
如何在python脚本中获取该计算机名称?
假设脚本运行在名为DARK-TOWER的计算机上,我想编写如下代码:
>>> python.library.get_computer_name()
'DARK-TOWER'
我可以使用标准库或第三方库吗?
Answers:
事实证明,这里有三个选项(包括前面已经回答的两个选项):
>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'
socket.gethostname()
返回libc gethostname()
,而platform.node()
返回platform.uname()[1]
与os.uname()
调用libc 有点相关uname()
...似乎它们可能会在同一地方结束,但是它们采用的路径截然不同,因此我不会依赖在不同平台上的价值是相同的
os.environ['COMPUTERNAME']
将返回所有大写字母,而platform.node()
和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()
返回正确的字符串。
正如Eric Palakovich Carr所说,您可以使用这三种变体。
我更喜欢一起使用它们:
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会很漂亮。