python,检测到不一致的缩进

时间:2014-08-21 20:08:59

标签: python-2.7 indentation

Razer Hydra SDK需要使用lanch install.py才能安装sdk

我安装了this,版本2.7,然后我打开了IDLE,在SDK中加载了install.py,按了F5,我得到了

“检测到不一致的缩进”

enter image description here

这里是第177行,第一个是printf

  if response == "3":
     self.platform = "linux_32"
  elif response == "4":
     self.platform = "linux_64"
  elif response == "5":
     self.platform = "osx_32"
  elif response == "6":
     self.platform = "osx_64"
  else:
     if response == "1" or response == "2":
        print "Currently Unsupported Target Operating System"
     else:
        print "Invalid Selection"
     self.chooseTargetPlatform()

我不知道python,我想知道这样的公司如何提供废话sdk,但就是这样

如果您需要完整代码here

编辑 - >选择全部和格式 - > Untabify地区似乎搞砸了格式

enter image description here

1 个答案:

答案 0 :(得分:2)

这里的问题是代码中有标签和空格的混合。

我已经解开了文件。尝试复制粘贴以下代码,或查看pastebin

#!/usr/bin/python

import sys
import os.path
from optparse import OptionParser
from shutil import rmtree, copy, copytree
import subprocess

cmdOpts = ''
cmdArgs = ''
config = ''

menu = """
Please select your operating system:
1. Windows 32 bit
2. Windows 64 bit
3. Linux 32 bit
4. Linux 65 bit
5. OSX 32 bit
6. OSX 64 bit
"""

def isInt( s ):
   try:
      int(s)
      return True
   except ValueError:
      return False


class SDKPackager:
   def __init__( self ):
      self.versionMajor = 1
      self.versionMinor = 0
      self.versionMacro = 1

      self.currentDirectory = os.path.dirname(os.path.realpath(__file__))
      self.platform = ""

      self.linux_32 = []
      self.linux_64 = []
      self.osx = []
      self.osx64 = []

      print "\nSixense SDK Installation Script v%02d.%02d.%02d" % ( self.versionMajor, self.versionMinor, self.versionMacro )
      if( not cmdOpts.printVersionAndExit ):
         print "============================================"

   def cleanString( self, string ):
      string = string.lstrip()
      string = string.rstrip(" \t\r\n\0")
      return string

   def cleanList( self, lst):
      if "" in lst:
         lst.remove("")
      return lst

   def forceString( self, value ):
      if not isinstance(value, str):
         return value[0]
      else:
         return value

   def getValue( self, key ):
      returnValue = []

      file = open(cmdOpts.config)
      for line in file:
         line = self.cleanString(line)
         if len(line) == 0:
            continue

         if line[0] == '#':
            continue

         pairs = line.split("=")

         keyFile = self.cleanString(pairs[0])
         if keyFile == key:
            for element in pairs[1].split(","):
               returnValue.append(self.cleanString(element))
            return returnValue

      return returnValue

   def find_in_file(self, filename, searchstr):    # see whether a string appears in a file at all, and tell on which line
      libfd = open(filename,"r")
      contents = libfd.readlines()
      libfd.close()
      index = 0
      for fline in contents:
         if searchstr in fline:
            return True, index
         index = index + 1
      return False, index

   def append_to_file(self, filename, newstr):
      libfd = open(filename,"a")
      libfd.write(newstr)
      libfd.close()

   def parseConfig( self ):

      print "-----------------------------------------------"
      print "Parsing Config File %s" % cmdOpts.config
      print "-----------------------------------------------"

      self.parseItem()

   def parseItem( self ):
      print "Finding Items"
      file = open(cmdOpts.config)

      for line in file:
         line = self.cleanString(line)

         if len(line) == 0:
            continue

         if line[0] == '#':
            continue

         pairs = line.split("=")

         key = self.cleanString(pairs[0])
         value = []

         if key == "linux_32" and self.platform == "linux_32":
            sys.stdout.write("Found Linux 32 bit")
            sys.stdout.flush()
            for element in pairs[1].split(","):
               if len(element) > 0:
                  self.linux_32.append(self.cleanString(element))
            print "                              Done"
         if key == "linux_64" and self.platform == "linux_64":
            sys.stdout.write("Found Linux 64 bit")
            sys.stdout.flush()
            for element in pairs[1].split(","):
               if len(element) > 0:
                  self.linux_64.append(self.cleanString(element))
            print "                             Done"
         if key == "osx_32" and self.platform == "osx_32":
            sys.stdout.write("Found OSX 32 bit")
            sys.stdout.flush()
            for element in pairs[1].split(","):
               if len(element) > 0:
                  self.osx.append(self.cleanString(element))
            print "                                 Done"
         if key == "osx_64" and self.platform == "osx_64":
            sys.stdout.write("Found OSX 64 bit")
            sys.stdout.flush()
            for element in pairs[1].split(","):
               if len(element) > 0:
                  self.osx64.append(self.cleanString(element))
            print "                                 Done"

      file.close()
      print "Done\n"

   def chooseTargetPlatform( self ):
      response = ""
      print menu

      response = raw_input("Enter Selection: ")

      if response == "3":
         self.platform = "linux_32"
      elif response == "4":
         self.platform = "linux_64"
      elif response == "5":
         self.platform = "osx_32"
      elif response == "6":
         self.platform = "osx_64"
      else:
         if response == "1" or response == "2":
            print "Currently Unsupported Target Operating System"
         else:
            print "Invalid Selection"
         self.chooseTargetPlatform()

   def preInstall( self ):
      return

   def install( self ):
      self.copyFilesHelper( self.linux_32, "Linux 32 bit" )
      self.copyFilesHelper( self.linux_64, "Linux 64 bit" )
      self.copyFilesHelper( self.osx, "OSX 32 bit" )
      self.copyFilesHelper( self.osx64, "OSX 64 bit" )
      return

   def copyFilesHelper( self, folderList, userText ):
      if not cmdOpts.verbose: 
         self.firstErrorAfterHeader = True
      destination = ""
      source = ""
      files = []
      if len(folderList) > 0:
         sys.stdout.write("- for %s\r" % userText)   
         sys.stdout.flush()
         if cmdOpts.verbose:   
            print ""
         for element in folderList:
            destination = self.getValue(element+"_destination")
            source = self.getValue(element+"_source")
            files = self.getValue(element+"_file")
            source = self.cleanList(source)
            files = self.cleanList(files)
            for outfile in files:
               self.copyFileParser( destination, source, outfile )
         if not cmdOpts.verbose:
            sys.stdout.write("%46s\r" % "Done")
            sys.stdout.write("- for %s\n" % userText) 
            sys.stdout.flush()
         else:
            print "Done\n"

   def copyFileParser( self, dstPath, srcPath, srcFile ):
      dst = ""
      src = ""
      if not isinstance(dstPath, str):
         dst = dstPath[0]
      else:
         dst =  dstPath  
      if not isinstance(srcPath, str):
         src = srcPath[0]
      else:
         src =  srcPath

      pathsExist = True

      if not os.path.isdir(src):
         if self.firstErrorAfterHeader:
            print ""
            self.firstErrorAfterHeader = False
         print "Source Path Does Not Exist: %s" % src
         pathsExist = False
      if not os.path.isdir(dst):
         if self.firstErrorAfterHeader:
            print ""
            self.firstErrorAfterHeader = False
         print "Destination Path Does Not Exist: %s" % dst
         pathsExist = False

      if not pathsExist:
         return

      #copy all files
      if srcFile.split('.')[0] == '*' and srcFile.split('.')[1] == '*':
         for filename in os.listdir( os.path.join(".",src) ):
            self.copyFile( dst, src, filename )
      #copy all files by extention
      elif srcFile.split('.')[0] == '*' and srcFile.split('.')[1] != '*':
         for filename in os.listdir( os.path.join(".",src) ):
            if os.path.isfile(filename):
               if filename.split('.')[1] == srcFile.split('.')[1]:
                  self.copyFile( dst, src, filename )
      #copy all files starting with <>
      elif srcFile.split('.')[0] != '*' and srcFile.split('.')[1] == '*':
         for filename in os.listdir( os.path.join(".",src) ):
            if filename.split('.')[0] == srcFile.split('.')[0]:
               self.copyFile( dst, src, filename )
      #copy individual file
      else:
         self.copyFile( dst, src, srcFile )

   def copyFile( self, dstPath, srcPath, srcFile ):
      fileExists = True

      if not os.path.isfile(os.path.join(srcPath,srcFile)):
         if os.path.isdir(os.path.join(srcPath,srcFile)):
            if cmdOpts.verbose:
               print "Copying all files from %s to %s" % (os.path.join(srcPath,srcFile), dstPath )
            copytree(srcPath,os.path.join(dstPath,srcFile))
            return
         else:
            if self.firstErrorAfterHeader:
               print ""
               self.firstErrorAfterHeader = False
            print "Source File Does Not Exist: %s" % os.path.join(srcPath,srcFile)
            fileExists = False

      if not fileExists:
         return

      if cmdOpts.verbose:
         print "Copying File %s from %s to %s" % (srcFile, srcPath, dstPath )
      copy( os.path.join(srcPath,srcFile), dstPath)

   def postInstall( self ):
      if self.platform =="linux_32" or self.platform == "linux_64":
         configFile = self.forceString(self.getValue("linux_library_config_file"))
         libPath = self.forceString(self.getValue("linux_library_path"))
         if os.path.isfile( configFile ):
            found, index = self.find_in_file(configFile,libPath)    # is lib path already there?
            if found:
               print "Library path is already registered in %s, on line %d." % (configFile,index)
            else:
               print "Library path not registered yet. Adding library path to %s..." % configFile
               self.append_to_file(configFile,"\n"+libPath+"\n")
            lib_update_cmd = "ldconfig"
            p = subprocess.Popen(lib_update_cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
         else:
            print "Unable to Find ld.so.conf"

   def run( self ):
      self.chooseTargetPlatform()
      self.parseConfig()
      self.preInstall()
      self.install()
      self.postInstall()

# main program starts here
if __name__ == '__main__':
   #configFile = "sdk_hierarchy_default"

   parser = OptionParser(usage="%prog [options]")

   parser.add_option('',"--version",
                     action="store_true",
                     dest="printVersionAndExit",
                     default=False,
                     help="Prints the version and exits",)

   parser.add_option('-c',"--config",
                     action="store",
                     dest="config",
                     default="install.cfg",
                     help="Config File to use",)

   parser.add_option('-v',"--verbose",
                     action="store_true",
                     dest="verbose",
                     default=False,
                     help="Print Extra Information",)

   parser.add_option('-w',"--warning",
                     action="store_true",
                     dest="warning",
                     default=False,
                     help="Print Only Warning Information",)

   (cmdOpts, cmdArgs) = parser.parse_args()

   package = SDKPackager()

   if( cmdOpts.printVersionAndExit ):
      exit()
   package.run()