获取运行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