2017-02-20 172 views
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' 

是否可以处理错误以这样的方式处理跳过Permission denied错误并继续到下一个文件?

我一直在玩例外等,但没有喜悦,所以任何帮助将不胜感激。

谢谢!

贾斯汀

+1

试试 - 除了应该在这里工作。请说明您尝试了什么以及它是如何失败的。 – 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 

这现在处理错误并继续运行。

感谢您的帮助!