0

Ich habe das folgende Python 2.4-Skript erstellt, das die Dateien auf einer Anzahl von LINUX-Laufwerken durchsucht und ihren Pfad und ihre Stats von os.stat in einem für Menschen lesbaren Format zurückgibt.Machen os.walk/os.stat ignorieren Berechtigung verweigert?

#!/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() 

Allerdings habe ich festgestellt, dass ich nicht auf einige der Dateien auf dem System zugreifen kann.

Ich erhalte die folgenden Fehler:

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' 

Ist es möglich, den Fehler in einer solchen Art und Weise zu handhaben, dass der Prozess die Erlaubnis verweigert Fehler überspringt und weiter in die nächste Datei?

Ich habe mit Ausnahmen usw. gespielt, aber keine Freude, so würde jede Hilfe sehr geschätzt werden.

Danke!

Justin

+1

Try-except sollte hier arbeiten. Bitte zeigen Sie, was Sie versucht haben und wie es scheiterte. – Lafexlos

Antwort

0

Das Problem verursacht wurde durch die os.lstat keine Berechtigungen, die auf der Datei auszuführen, hatte ich, die try-except an der falschen Stelle verwendet wird. Um den Fehler zu behandeln, sollten der Versuch und die Ausnahme wie folgt hinzugefügt werden.

#!/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 

Dies behandelt jetzt den Fehler und läuft weiter.

Vielen Dank für Ihre Hilfe!