2012-09-18 24 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

相關問題