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

Posted

技术标签:

【中文标题】获取运行python脚本的Windows计算机的名称?【英文标题】:Getting name of windows computer running python script? 【发布时间】:2010-10-22 10:27:00 【问题描述】:

我的网络上有几台 Windows 计算机将运行 python 脚本。根据运行此脚本的计算机,应在脚本中使用一组不同的配置选项。

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

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

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

是否有我可以使用的标准库或第三方库?

【问题讨论】:

【参考方案1】:

原来有三个选项(包括前面已经回答的两个):

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

【讨论】:

回答自己的问题可能被某些人认为是低俗的,但它完全没问题,根据常见问题解答:***.com/faq 我认为这一点也不坏,因为 Eric 将几个不同的响应编译到一个资源中,更不用说添加一个新的响应(平台)了。 好的,所以这需要跟进:platform.node() 和 socket.gethostname() 有什么区别?他们会有所不同吗? 在 posix 系统上,socket.gethostname() 返回 libc gethostname(),而 platform.node() 返回 platform.uname()[1],这与调用 libc uname()os.uname() 有点相关...看起来就像他们最终可能会在同一个地方,但他们采取完全不同的路径到达那里,我不会依赖于在不同平台上相同的价值。 值得注意的是os.environ['COMPUTERNAME'] 将返回全部大写,而platform.node()socket.gethostname() 可以返回混合大小写。【参考方案2】:
import socket
socket.gethostname()

【讨论】:

+1 因为这是最好的方法。这是最有效的跨平台调用。 platform.node() 也是跨平台的 计算机名和主机名是两个不同的东西。例如,当您在 *** 中时,您的主机名是 X,您的计算机名可以是 Y。这个答案是不正确的,因为问题是关于计算机名而不是主机名。【参考方案3】:

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

import os
os.getenv('COMPUTERNAME')

【讨论】:

这对我在 OS-X 10.6.8 上使用 Python 2.7.2 不起作用,它返回 None。但是,描述的其他方法确实有效。 @PeterGibson 我在 Ubuntu 12.04 上遇到了同样的事情。 在 Ubuntu 16.04 上为我返回 None。有趣的是,HOSTNAME 是 bash 中定义的环境变量,但os.getenv('HOSTNAME') 也都返回None,而socket.gethostname() 返回正确的字符串。【参考方案4】:

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

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

【讨论】:

更简洁一点:如果 n1==n2 或 n2==n3: return n1 elif n2==n3: return n2 else: raise Exception("计算机名不相等") @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:你是对的。 (无论出于何种原因,它都不允许我对其进行编辑)。 如果环境中不存在“COMPUTERNAME”,您可以使用 os.getenv("COMPUTERNAME") 返回 None 而不是引发错误。【参考方案5】:

由于 python 脚本肯定会在 Windows 系统上运行,您应该使用 Win32 API GetComputerName 或 GetComputerNameEx

您可以获得完全限定的 DNS 名称、NETBios 名称或各种不同的名称。

import win32api
win32api.GetComputerName()

>>'MYNAME'

或者:

import win32api
WIN32_ComputerNameDnsHostname = 1 
win32api.GetComputerNameEx(WIN32_ComputerNameDnsHostname)

>> u'MYNAME'

【讨论】:

【参考方案6】:
import socket
pc = socket.gethostname()
print pc

【讨论】:

请在答案中添加一些解释。 此外,这个答案只是一个 10 岁的高度支持的其他 answer 的副本。【参考方案7】:

我打赌gethostname 会很好用。

【讨论】:

以上是关于获取运行python脚本的Windows计算机的名称?的主要内容,如果未能解决你的问题,请参考以下文章

Windows Powershell无法运行,无法将“python”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

python 从windows获取环境变量:os.environ

python 从windows获取环境变量:os.environ

在android应用程序中运行python脚本

python脚本获取文件的创建于修改日期并计算时间差

从php.in windows调用python脚本