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 

Это сообщение об ошибке и продолжает работать.

Спасибо за вашу помощь!