0

以下のPython 2.4スクリプトを作成して、いくつかのLINUXディスク上のファイルをスキャンし、os.statから人間の読める形式でパスと統計情報を返します。os.walk/os.stat無視の許可を拒否しますか?

#!/usr/bin/env python 

from datetime import datetime as dt 
import os 
import grp 
import pwd 

locations = ["/disk1", "/disk2", "/disk3", "/disk4", "/disk5", "/disk6"] 

for item in locations: 
    for root, dirs, files in os.walk(item): 
     for fn in files: 
      path = os.path.join(root, fn) 
      stats = os.lstat(path) 
      size = str(stats.st_size) 
      user = pwd.getpwuid(stats.st_uid)[0] 
      group = grp.getgrgid(stats.st_gid)[0] 
      laccess = dt.fromtimestamp(stats.st_atime).strftime("%Y-%m-%d,%H:%M:%S") 
      lmod = dt.fromtimestamp(stats.st_mtime).strftime("%Y-%m-%d,%H:%M:%S") 
      c = "," 
      t1 = ["0,", path, c, size, c, user, c, group, c, laccess, c, lmod,"\n"] 
      outfile = open("/data/promigrate/DiskDashboard/Temp/filescan.csv", "at") 
      outfile.write("".join(t1)) 
      outfile.close() 

しかし、私はシステム上のいくつかのファイルにアクセスできないことを発見しました。

私は以下のエラーが表示されます。

abc12bmm -34> python files_scan.py 
Traceback (most recent call last): 
    File "files_scan.py", line 24, in ? 
     stats = os.lstat(path) 
OSError: [Errno 13] Permission denied: '/disk1/file5' 

プロセスがパーミッション拒否エラーをスキップし、次のファイルに続くような方法でエラーを処理することが可能ですか?

私は例外などで遊んでいますが、喜びはありませんので、どんな助けでも大歓迎です。

ありがとうございます!

ジャスティン

+1

try-exceptはここで動作するはずです。何を試して、どのように失敗したのかを示してください。 – Lafexlos

答えて

0

問題は、私が試して-除いて使用していた間違った場所に、ファイル上で実行する権限を持っていないos.lstatによって引き起こされました。このエラーを処理するには、tryとexceptを次のように追加する必要があります。

#!/usr/bin/env python 

from datetime import datetime as dt 
import os 
import grp 
import pwd 

locations = ["/disk1", "/disk2", "/disk3", "/disk4", "/disk5", "/disk6"] 

for item in locations: 
    for root, dirs, files in os.walk(item): 
     for fn in files: 
      path = os.path.join(root, fn) 
      try: 
       stats = os.lstat(path) 
       size = str(stats.st_size) 
       user = pwd.getpwuid(stats.st_uid)[0] 
       group = grp.getgrgid(stats.st_gid)[0] 
       laccess = dt.fromtimestamp(stats.st_atime).strftime("%Y-%m-%d,%H:%M:%S") 
       lmod = dt.fromtimestamp(stats.st_mtime).strftime("%Y-%m-%d,%H:%M:%S") 
       c = "," 
       t1 = ["0,", path, c, size, c, user, c, group, c, laccess, c, lmod,"\n"] 
       outfile = open("/data/promigrate/DiskDashboard/Temp/filescan.csv", "at") 
       outfile.write("".join(t1)) 
       outfile.close() 
      except OSError: 
       pass 

これでエラーが処理され、実行が継続されます。

ありがとうございました!

関連する問題