1

私は初心者の python プログラマーで、単純な管理タスクに使用しています。

私は小さなログ移動コードを書きました (サーバーからストレージに移動される大量のログ ファイルを生成するシステムがあるため)。

コピーしようとすると、リモート パス上のファイルのアクセス許可エラーが発生するため、これを try: ステートメントでラップして試行し、エラーをバイパスしますが、スクリプトはまだ終了しています... 32 行目は閉じています。 copy2 (場所、場所のコピー)。

ベース パスはローカル ディレクトリであり、ログ ディレクトリは UNC パスです (フォルダー セットに追加されます)。フォルダーは、スクリプトの前半で両方のファイル システム間でミラーリングされます。(常に存在する必要があります)。

os.remove あたりの作業など、他にもトライすればOK。

誰かが私を一般的な方向に向けることができれば幸いです。

Traceback (most recent call last):
  File "C:\Program Files (x86)\Log Mover\log_mover.py", line 32,
  shutil.copy2 (location,copylocation)
  File "C:\Python27\lib\shutil.py", line 127, in copy2
  copyfile(src, dst)
  File "C:\Python27\lib\shutil.py", line 82, in copyfile
    with open(dst, 'wb') as fdst:
  IOError: [Errno 13] Permission denied: '\\\\XXXX\\d$\\logs\\
  logs/XXX\\XXX - 2012-07-03 21-49.XXXX'
  ☀could not delete:C:/logs/XX\XXX\XXX 2012-07-04 08-00-42.txt
  Traceback (most recent call last):


for root, dirs, files in os.walk(basepath):
   for filenames in files:
        location = os.path.join(root, filenames)
        try:
            datemod = time.strftime("%Y%m%d%H",time.localtime(os.path.getmtime(location)))
        except OSError:
            print "count not get mod time:"+location
        if datemod != currtime:
            drive,path = os.path.splitdrive(location)
            copylocation = str(logdir)+str(path)
            try:
                shutil.copy2 (location,copylocation)
            except OSError:
                print "could not copy"
            pass

            if os.path.getsize(location) == os.path.getsize(copylocation):
                try:
                    os.remove(location)
                    print "Deleted"+location
                except OSError:
                    print "could not delete:"+location
                pass
            else:
                print "sizes dont match"

ありがとう

ケニー

4

2 に答える 2

3

IOError を取得しているときに、OSError をキャッチしようとしています。

これを追加:

except (OSError, IOError):
    #some code
于 2012-07-04T17:00:04.280 に答える
2

shutil.copy2をスローしIOErrorますが、OSErrors をキャッチしているため、キャッチされずにバブルします。

于 2012-07-04T16:59:46.337 に答える