“for循环”(pyvmomi)中的python3.4缩进错误

时间:2017-03-22 17:18:58

标签: pyvmomi

尝试在循环中调用python3.4类方法。 但得到这个“TabError: inconsistent use of tabs and spaces in indentation

我查看了“vim”和“gedit / sublime”中的代码,并且没有显示任何明显的错误。

它不一定是缩进而是其他一些错误吗?

感谢。

$ cat pyvmomi-loop.py 
from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
from builtins import *
import atexit
import sys
sys.path.insert(0, '/usr/lib/python2.7/site-packages')
import pyVmomi
import argparse
import atexit
import itertools
from pyVim.connect import SmartConnect, Disconnect
import humanize 
from pyVim import connect
from pyVmomi import vmodl
from pyVmomi import vim

## cred
host="1.2.3.4"
user="aa\bb"
password="$!@DD"
port=443

## Ignore certificate error
import ssl
try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    print ("Ignoring SSL Error")
    ssl._create_default_https_context = _create_unverified_https_context

## Fetch id an dpw

def GetArgs():

    parser = argparse.ArgumentParser(
        description='Process args for retrieving all the Virtual Machines')
    parser.add_argument('-s', '--host', required=True, action='store',
                        help='Remote host to connect to')
    parser.add_argument('-o', '--port', type=int, default=443, action='store',
                        help='Port to connect on')
    parser.add_argument('-u', '--user', required=True, action='store',
                        help='User name to use when connecting to host')
    parser.add_argument('-p', '--password', required=False, action='store',
                        help='Password to use when connecting to host')
    args = parser.parse_args()
    return args


## Method to fetch VM info

def printHost(host):

    try:
        summary = host.summary
        stats = summary.quickStats
        hardware = host.hardware
        cpuUsage = stats.overallCpuUsage
        memoryCapacity = hardware.memorySize
        memoryCapacityInMB = hardware.memorySize/MBFACTOR
        memoryUsage = stats.overallMemoryUsage
        freeMemoryPercentage = 100 - (
            (float(memoryUsage) / memoryCapacityInMB) * 100
        )
        print ("--------------------------------------------------")
        print ("Host name: ", host.name)
        print ("Host CPU usage: ", cpuUsage)
        print ("Host memory capacity: ", humanize.naturalsize(memoryCapacity,
                                                             binary=True))
        print ("Host memory usage: ", memoryUsage / 1024, "GiB")
        print ("Free memory percentage: " + str(freeMemoryPercentage) + "%")
        print ("--------------------------------------------------")
    except Exception as error:
        print ("Unable to access information for host: ", host.name)
        print (error)
        pass



## Main method

def main():

    # argsCred = GetArgs()

    try:
        service_instance = connect.SmartConnect(host=host,
                                                user=user,
                                                pwd=password,
                                                port=port,
                                                )

## What to do when exiting
        atexit.register(connect.Disconnect, service_instance)

##Content object
        content = service_instance.RetrieveContent()

        container = content.rootFolder  # starting point to look into
        viewType = [vim.VirtualMachine]  # object types to look for
        recursive = True  # whether we should look into it recursively

## Create a view
        containerView = content.viewManager.CreateContainerView(
            container, viewType, recursive)

## Loop through all obhects to return name and VMware tools version
        children = containerView.view
        for child in children:
            if child.summary.guest is not None:
                try:
                    tools_version = child.summary.guest.toolsStatus
                            osFam = child.summary.guest.guestId
                    print("VM: {}, VMware-tools: {}".format(child.name, tools_version))
                        print("VM: {}, OS Fam: {}".format(child.name, osFam))
                except:
                    print("Vmware-tools: None")




    except vmodl.MethodFault as error:
        print("Caught vmodl fault : " + error.msg)
        return -1

    return 0

## Start program
if __name__ == "__main__":
    main()

1 个答案:

答案 0 :(得分:0)

此代码存在缩进问题。

更改

for child in children: if child.summary.guest is not None: try: tools_version = child.summary.guest.toolsStatus osFam = child.summary.guest.guestId print("VM: {}, VMware-tools: {}".format(child.name, tools_version)) print("VM: {}, OS Fam: {}".format(child.name, osFam)) except: print("Vmware-tools: None")

for child in children: if child.summary.guest is not None: try: tools_version = child.summary.guest.toolsStatus osFam = child.summary.guest.guestId print("VM: {}, VMware-tools: {}".format(child.name, tools_version)) print("VM: {}, OS Fam: {}".format(child.name, osFam)) except: print("Vmware-tools: None")

如果这是您的整个.py文件,则错误位于第114行和第116行。 不要复制粘贴此代码,因为可能有太多的空格。只需缩进我提到的代码中的代码。

编辑:在vim或gedit或其他文本编辑器中编码不是一个好习惯。看看Pycharm:)