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

Eri*_*arr 81 python windows networking

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

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

假设脚本在名为DARK-TOWER的计算机上运行,​​我想写这样的东西:

>>> python.library.get_computer_name()
'DARK-TOWER'
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*arr 137

事实证明有三个选项(包括之前已经回答过的两个选项):

>>> import platform
>>> import socket
>>> import os
>>> platform.node()
'DARK-TOWER'
>>> socket.gethostname()
'DARK-TOWER'
>>> os.environ['COMPUTERNAME']
'DARK-TOWER'
Run Code Online (Sandbox Code Playgroud)

  • 回答一个人自己的问题可能会被一些人视为不良品味,但根据常见问题解答,它完全没问题:http://stackoverflow.com/faq (14认同)
  • 我认为这根本不好,因为Eric正在将一些不同的响应编译成单个资源,更不用说添加一个新的(平台)了. (9认同)
  • 好吧,所以这要求后续跟进:platform.node()和socket.gethostname()之间的区别是什么?他们可能会有所不同吗? (4认同)
  • 在posix系统上,`socket.gethostname()`返回libc`gethostname()`,而`platform.node()`返回`platform.uname()[1]`,它与`os.uname()有些相关`它调用libc`uname()`......看起来它们可能最终会在同一个地方,但它们采用完全不同的路径到达那里,我不会依赖于不同的值相同平台. (4认同)
  • 值得注意的是,“ os.environ ['COMPUTERNAME']”将返回全部大写,而“ platform.node()”和“ socket.gethostname()”则可能返回大小写混合。 (2认同)

ink*_*dmn 29

import socket
socket.gethostname()
Run Code Online (Sandbox Code Playgroud)

  • +1 因为这是最好的方法。这是最有效的跨平台调用。 (2认同)

one*_*ter 20

来自https://mail.python.org/pipermail/python-list/2006-April/397494.html

import os
os.getenv('COMPUTERNAME')
Run Code Online (Sandbox Code Playgroud)

  • 这在OS-X 10.6.8上使用Python 2.7.2不起作用,它返回None.然而,所描述的其他方法确实有效. (4认同)
  • 谢谢大家的答案.他们都工作得很好,所以我选择了评分最低的人. (3认同)
  • @PeterGibson 我在 Ubuntu 12.04 上发生了同样的事情。 (2认同)
  • @EricPalakovichCarr,我建议删除这个作为接受的答案,因为没有在某些平台上工作. (2认同)

Fam*_*tor 10

正如Eric 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")
Run Code Online (Sandbox Code Playgroud)

在开发交叉模式应用程序时我更喜欢它;)

  • @CharlesPlager应该是:“如果n1 == n2或n1 == n3:返回n1 elif n2 == n3:返回n2 else:引发Exception(“计算机名彼此不相等”))(`n1`代替的`n2`) (2认同)

Bri*_*ndy 6

由于python scrips肯定在windows系统上运行,你应该使用Win32 API GetComputerNameGetComputerNameEx

您可以获得完全限定的DNS名称,NETBIOS名称或各种不同的东西.

import win32api
win32api.GetComputerName()

>>'MYNAME'
Run Code Online (Sandbox Code Playgroud)

要么:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'
Run Code Online (Sandbox Code Playgroud)