我不知道为什么django这样做,它是关于os.stat

时间:2009-12-28 06:44:53

标签: python

这样做有什么好处:

import os
ST_MODE  = 0
ST_INO   = 1
ST_DEV   = 2
ST_NLINK = 3
ST_UID   = 4
ST_GID   = 5
ST_SIZE  = 6
ST_ATIME = 7
ST_MTIME = 8
ST_CTIME = 9

# Extract bits from the mode

def S_IMODE(mode):
    return mode & 07777

def S_IFMT(mode):
    return mode & 0170000

# Constants used as S_IFMT() for various file types
# (not all are implemented on all systems)

S_IFDIR  = 0040000
S_IFCHR  = 0020000
S_IFBLK  = 0060000
S_IFREG  = 0100000
S_IFIFO  = 0010000
S_IFLNK  = 0120000
S_IFSOCK = 0140000

# Functions to test for each file type

def S_ISDIR(mode):
    return S_IFMT(mode) == S_IFDIR
def isdir(path):
    """Test whether a path is a directory"""
    try:
        st = os.stat(path)
    except os.error:
        return False
    return S_ISDIR(st.st_mode)#this code ,why

感谢

1 个答案:

答案 0 :(得分:2)

好处?我想其中一个(一个'负面的')是阻止代码尝试将目录作为常规文件处理。如果您运行以下代码:

myprog *

shell会将*更改为当前目录中所有文件的列表(包括子目录,管道,设备节点和各种其他特殊文件),相当于:

myprog mydir1 mydir2 myfile1.jpg myfile2.txt mynamedpipe1

检查其中一个参数是否为非常规文件对于确保只处理所需文件类型至关重要。您不希望(例如)打开管道文件进行输入并读取直到文件结尾,因为文件末尾只会在管道的另一端关闭它时发生。这看起来像你的程序已冻结。

另一种可能性(“肯定的”)是确保程序期望成为目录(例如临时目录或配置文件目录)的实际 目录。

这是因为UNIX哲学 - 一切都是文件,如果你只想要某些类型的文件,你必须自己过滤它们。

其中有效的方式stat返回有关文件的各种精彩信息,其中一条信息是其模式。在此模式下,某些位被设置为指示它是什么类型的文件。

S_ISDIR函数测试指示文件是目录的特定位组合,并在这种情况下返回true。如果未将这些位设置为指示目录或文件不存在,则返回false。