获取运行python脚本的Windows计算机的名称?


94

基本上,我的网络上有几台Windows计算机,这些计算机将运行python脚本。脚本中应使用一组不同的配置选项,具体取决于运行此脚本的计算机。

如何在python脚本中获取该计算机名称?

假设脚本运行在名为DARK-TOWER的计算机上,我想编写如下代码:

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

我可以使用标准库或第三方库吗?

Answers:


160

事实证明,这里有三个选项(包括前面已经回答的两个选项):

>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'

16
回答自己的问题可能被某些人认为是不良品,但是根据常见问题解答,它是完全可以的:stackoverflow.com/faq
Stephan202

9
我并不认为这很糟糕,因为Eric将一些不同的响应编译到一个资源中,更不用说添加一个新的(平台)了。
nilamo

4
好的,所以我们呼吁进行后续工作:platform.node()和socket.gethostname()有什么区别?他们会有所不同吗?
詹森S

4
在posix系统上,socket.gethostname()返回libc gethostname(),而platform.node()返回platform.uname()[1]os.uname()调用libc 有点相关uname()...似乎它们可能会在同一地方结束,但是它们采用的路径截然不同,因此我不会依赖在不同平台上的价值是相同的
彼得·吉布森

5
值得注意的是,这os.environ['COMPUTERNAME']将返回所有大写字母,而platform.node()socket.gethostname()可以返回混合大小写。
MrNoob


20

5
在使用Python 2.7.2的OS-X 10.6.8上,这对我不起作用,它返回None。但是,所描述的其他方法确实有效。
彼得·吉布森

2
@PeterGibson我在Ubuntu 12.04上发生了同样的事情。
丹尼尔·F

None在Ubuntu 16.04上为我返回。有趣的是,它HOSTNAME是bash中已定义的环境变量,但是两者都os.getenv('HOSTNAME')返回None,而socket.gethostname()返回正确的字符串。
Matt Hancock

12

正如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")

确保开发跨平台应用程序时,我更喜欢它;)


1
稍微干净一点:如果n1 == n2或n2 == n3:返回n1小数点n2 == n3:返回n2否则:引发Exception(“计算机名彼此不相等”)
Charles Plager

2
@CharlesPlager它应该是: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
dexteritas

@dexteritas:您是正确的。(无论出于何种原因,它都不允许我对其进行编辑)。
查尔斯·普拉格

6

由于python脚本肯定在Windows系统上运行,因此应使用Win32 API GetComputerNameGetComputerNameEx

您可以获取标准的DNS名称或NETBIOS名称,或其他各种名称。

import win32api
win32api.GetComputerName()

>>'MYNAME'

要么:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.