2012-09-18 25 views
0

我想将列表中存储的文件与位于可能是W2K3或W2K8的服务器上的同一文件进行比较。我试图使用一个单一的功能,但我坚持这个if语句。我试图找出如何让正确的目录路径为os.walk():如何使用基于操作系统版本的python来浏览目录?

if osVer == 'serverW2k3': 
     continue 
    elif osVer == 'serverW2k8': 
     for folder, subfolders, files in os.walk(): 

我确实有这方面的工作之前,但有重复行,所以我想简化代码。 这里是满级:

class checkstatus: 
    def __init__(self): 
     print 'Checking Status...' 
     chkbkpstats = csv.reader(file('c://temp//networkerservers.csv')) 

     srvrs = [] 
     for row in chkbkpstats: 
      srvrs.append({'Name' : row[0], 'Instance' : row[1]}) 

     for srvr in srvrs: 
      srvrName = (srvr['Name']) 
      srvrInst = (srvr['Instance']) 
      w2k3Chk = r'\\%s\d$\DA$Utils\log\networker' % srvrName 
      w2k8Chk = r'\\%s\c$\ProgramData\SQL\DA$Utils\log\networker' % srvrName 

      try: 
       c = wmi.WMI(srvr['Name']) 

      except: 
       print 'Error connecting to %s to check OS version' % srvrName 

      else: 
       osVer = c.Win32_OperatingSystem()[0].Caption 
       if '2003' in osVer: 
        return 'serverW2k3' 
        #self.fileCheck(w2k3Chk, w2k8Chk, srvrInst, srvrName) 

       elif '2008' in osVer: 
        return 'serverW2k8' 
        #self.fileCheck(w2k3Chk, w2k8Chk, srvrInst, srvrName) 

    def fileCheck(self, w2k3Chk, w2k8Chk, srvrInst, srvrName, osVer): 
     found = False 
     if osVer == 'serverW2k3': 
      continue 
     elif osVer == 'serverW2k8': 
      for folder, subfolders, files in os.walk(): 
       for sqlFile in files: 
        if sqlFile == srvrInst + ".log": 
         found = True 
         print 'The Backup For %s on %s Still Running' % (srvrInst, srvrName) 
        elif sqlFile == (srvrInst + ".ok"): 
         found = True 
         print 'The Backup For %s on %s Completed Successfully' % (srvrInst, srvrName) 
        elif sqlFile == (srvrInst + ".err"): 
         found = True 
         print 'The Backup For %s on %s Has Failed' % (srvrInst, srvrName) 
       if not found: 
        print 'No file for %s found on %s' % (srvrInst, srvrName) 
+0

或许这更好的地方是[代码审查(http://codereview.stackexchange.com/) – inspectorG4dget

回答

0

你的问题是有点不清楚,你的示例代码显然不是你真正的代码(你不能没有PARAMS调用os.walk),但我想我可以猜到你在做什么。

首先,更改fileCheck这样的:

def fileCheck(self, path, srvrInst, srvrName): 
    found = False 
    for folder, subfolders, files in os.walk(path): 
     ... 

现在,在__init__,做最后的部分是这样的:

else: 
    osVer = c.Win32_OperatingSystem()[0].Caption 
    if '2003' in osVer: 
     self.fileCheck(w2k3Chk, srvrInst, srvrName) 
    else: 
     self.fileCheck(w2k8Chk, srvrInst, srvrName) 
+0

感谢您的帮助!在我切换之前,我有2条if语句。所以在我的os.walk()声明中我分别使用了'w2k3Chk'和'w2k8Chk'。检查我遇到的文件取决于该机器具有的Windows服务器版本,I.E. W2k8或W2K3。路径是不同的,如我在原来的发布代码中所述。 – DaryleB

+0

有了您的帮助abarnert我能找出我的问题,谢谢 – DaryleB

0

这里是我的更新,功能代码snipit。

 else: 
      osVer = c.Win32_OperatingSystem()[0].Caption 
      if '2003' in osVer: 
       self.fileCheck(srvrInst, srvrName, osVer, w2k3Chk, w2k8Chk) 

      elif '2008' in osVer: 
       self.fileCheck(srvrInst, srvrName, osVer, w2k3Chk, w2k8Chk) 

def fileCheck(self, srvrInst, srvrName, osVer, w2k3Chk, w2k8Chk): 
    found = False 
    if '2003' in osVer: 
     path = w2k3Chk 
    elif '2008' in osVer: 
     path = w2k8Chk 
    for folder, subfolders, files in os.walk(path): 
+0

的'if' /'elif'在片段上半年是没用的,因为你在两个分支做同样的事情。如果你需要'fileCheck'中的两个值,只需要在没有第一个'if' /'elif'的情况下调用它。如果你不这样做,把'fileCheck'改为'path'而不是用来确定它的三个变量,然后你不需要第二个'if' /'elif'。 – abarnert

相关问题