Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取所有虚拟机主机名_Python_Vsphere - Fatal编程技术网

Python 获取所有虚拟机主机名

Python 获取所有虚拟机主机名,python,vsphere,Python,Vsphere,我需要使用pysphere获取驻留在两个ESXI服务器上的所有VM的所有主机名的列表。我尝试使用基本方法,但在测试中无法使用以下方法获取主机名: from pysphere import VIServer server = VIServer() server.connect("192.168.0.19", "user-name", "password") vmlist = server.get_registered_vms() vm1 = server.get_vm_by_path( "

我需要使用pysphere获取驻留在两个ESXI服务器上的所有VM的所有主机名的列表。我尝试使用基本方法,但在测试中无法使用以下方法获取主机名:

from pysphere import VIServer
server = VIServer()
server.connect("192.168.0.19", "user-name", "password")
vmlist = server.get_registered_vms()
vm1 = server.get_vm_by_path(
    "[datastore1] Ubuntu 14.04 64-bit .160/Ubuntu 14.04 64-bit    .160.vmx")
vm1.get_property('hostname')

有更好的方法吗?

您可以这样组合使用ntpath和操作系统模块

import os
import ntpath
for i in vmlist:
    print os.path.splitext(ntpath.basename(i))[0]

感谢您的回复,但这不是输出的问题,而是使用pysphereskip从VM中提取主机名,这是代码中的最后两行。通过vmlist循环,你得到了所有的主机名。这是可行的,但它打印的是虚拟机的名称,而不是操作系统的实际主机名。例如,我有一个名为“CentOS 6.4 32位.93”的虚拟机,但/etc/hostname下的实际主机名是“dev-box”aahh,它无法工作:)。我当时不知道有什么直接的方法可以解决这个问题。您应该记住,“内部”的内容通常与vmware主机非常分离。因此,您必须像对待普通服务器一样对待它们。让我试试看,几小时后我会向您提供最新信息(我现在正在工作)。1-ssh到vmware主机2-mass ping正在使用的IP范围。(填充arp表)3-use pysphere获取虚拟机的mac地址。4-获取arp表witrh:excli网络ip邻居列表5-解析该表,比较来自虚拟机的mac地址。获取ip地址。6-ssh到地址,并获取主机名。您必须用python编写所有这些,这将花费您一段时间。或者,我希望其他人知道一个更好的主意/api/lib,可以帮助您。