使OS.Walk/OS.STAT忽略许可拒绝



我制作了以下python 2.4脚本,该脚本扫描了许多Linux磁盘上的文件,并从OS返回其路径和统计信息。以人类可读格式插入。

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

是否可以以这样的方式处理错误,以使该过程跳过权限拒绝错误并继续到下一个文件?

我一直在玩例外等,但没有欢乐,因此任何帮助将不胜感激。

谢谢!

贾斯汀

问题是由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

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

感谢您的所有帮助!

最新更新