0

このスクリプトを作成して、リモートサーバー上のファイルに設定されたサフィックスIE .ok、.err、.logが含まれているかどうかを確認しようとしています。"('\\\\THPNWSS5\\d$\\DA$Utils\\log\\networker', [], ['P3EWS.err']) nothing is equal「 tryステートメントに何か問題があることはわかっています
が、それがわかりません。

    chkbkpstats = csv.reader(file('c://temp//networkerservers1.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\folder\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:
                for file in os.walk(w2k3chk):
                    print file
                    try:
                        if srvrInst == srvrInst + ".log":
                            print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
                        if srvrInst == (srvrInst + ".ok"):
                            print 'Completed Successfully'
                        if srvrInst == (srvrInst + ".err"):
                            print 'Backup failed'
                    except:
                        print 'nothing is equal'
                #print '%s is w2k3' % srvr['Name']
            elif '2008' in osVer:
                print '%s is w2k8' % srvr['Name']
4

2 に答える 2

2

この行には問題があります

 if srvrInst == file.srvrInst + ".log":

する必要があります:-

if file == (srvrInst + ".log"):

ファイルに。はありませんsrvrInst

編集後の更新:-

これが真実であるとどのように考えることができますか:-

if srvrInst == (srvrInst + ".ok"):

仮定するsrvrInst="John"

"ジョン"=="John.ok"

本当でありえますか????

于 2012-09-07T18:37:50.327 に答える
0

@लंडは現在のコードで最も差し迫ったエラーを指摘していますが、彼が提案した修正file == (srcInst + ".log")も機能しません。これは、os.walk関数がファイル名を返すだけではないためです。これは、3つのタプルのジェネレーターを返します。各タプルは、ディレクトリー、サブディレクトリーのリスト(これもウォークされます)、およびファイルのリストで構成されます。個々のファイルを調べるには、追加のループが必要です。

このようなものが機能するはずです:

found = False
for folder, subfolders, files in os.walk(w2k3chk):
    for file in files:
        if file == srvrInst + ".log":
            found = True
            print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
        elif file == (srvrInst + ".ok"):
            found = True
            print 'Completed Successfully'
        elif file == (srvrInst + ".err"):
            found = True
            print 'Backup failed'
if not found:
    print 'No file found'

検索しているフォルダにファイルが1つしかないことが確実な場合は、それを少し単純化できます。

try:
    folder, subfolders, files = next(os.walk(w2k3chk)):
    file = files[0]
    if file == srvrInst + ".log":
        print 'The Backup for %s on %s still running' % (srvrInst, srvrName)
    elif file == (srvrInst + ".ok"):
        print 'Completed Successfully'
    elif file == (srvrInst + ".err"):
        print 'Backup failed'
    else:
        print 'Unknown file found: %s' % (file)
except (StopIteration, IndexError): # exceptions if folder or file doesn't exist
    print 'No file found'
于 2012-09-07T19:33:30.653 に答える