blob: 835f4485bf7fcbaa514dc56d66641b7d8f0681a9 [file] [log] [blame]
Georg Brandl8ec7f652007-08-15 14:28:01 +00001
2:mod:`stat` --- Interpreting :func:`stat` results
3=================================================
4
5.. module:: stat
6 :synopsis: Utilities for interpreting the results of os.stat(), os.lstat() and os.fstat().
7.. sectionauthor:: Skip Montanaro <skip@automatrix.com>
8
9
10The :mod:`stat` module defines constants and functions for interpreting the
11results of :func:`os.stat`, :func:`os.fstat` and :func:`os.lstat` (if they
12exist). For complete details about the :cfunc:`stat`, :cfunc:`fstat` and
13:cfunc:`lstat` calls, consult the documentation for your system.
14
15The :mod:`stat` module defines the following functions to test for specific file
16types:
17
18
19.. function:: S_ISDIR(mode)
20
21 Return non-zero if the mode is from a directory.
22
23
24.. function:: S_ISCHR(mode)
25
26 Return non-zero if the mode is from a character special device file.
27
28
29.. function:: S_ISBLK(mode)
30
31 Return non-zero if the mode is from a block special device file.
32
33
34.. function:: S_ISREG(mode)
35
36 Return non-zero if the mode is from a regular file.
37
38
39.. function:: S_ISFIFO(mode)
40
41 Return non-zero if the mode is from a FIFO (named pipe).
42
43
44.. function:: S_ISLNK(mode)
45
46 Return non-zero if the mode is from a symbolic link.
47
48
49.. function:: S_ISSOCK(mode)
50
51 Return non-zero if the mode is from a socket.
52
53Two additional functions are defined for more general manipulation of the file's
54mode:
55
56
57.. function:: S_IMODE(mode)
58
59 Return the portion of the file's mode that can be set by :func:`os.chmod`\
60 ---that is, the file's permission bits, plus the sticky bit, set-group-id, and
61 set-user-id bits (on systems that support them).
62
63
64.. function:: S_IFMT(mode)
65
66 Return the portion of the file's mode that describes the file type (used by the
67 :func:`S_IS\*` functions above).
68
69Normally, you would use the :func:`os.path.is\*` functions for testing the type
70of a file; the functions here are useful when you are doing multiple tests of
71the same file and wish to avoid the overhead of the :cfunc:`stat` system call
72for each test. These are also useful when checking for information about a file
73that isn't handled by :mod:`os.path`, like the tests for block and character
74devices.
75
76All the variables below are simply symbolic indexes into the 10-tuple returned
77by :func:`os.stat`, :func:`os.fstat` or :func:`os.lstat`.
78
79
80.. data:: ST_MODE
81
82 Inode protection mode.
83
84
85.. data:: ST_INO
86
87 Inode number.
88
89
90.. data:: ST_DEV
91
92 Device inode resides on.
93
94
95.. data:: ST_NLINK
96
97 Number of links to the inode.
98
99
100.. data:: ST_UID
101
102 User id of the owner.
103
104
105.. data:: ST_GID
106
107 Group id of the owner.
108
109
110.. data:: ST_SIZE
111
112 Size in bytes of a plain file; amount of data waiting on some special files.
113
114
115.. data:: ST_ATIME
116
117 Time of last access.
118
119
120.. data:: ST_MTIME
121
122 Time of last modification.
123
124
125.. data:: ST_CTIME
126
127 The "ctime" as reported by the operating system. On some systems (like Unix) is
128 the time of the last metadata change, and, on others (like Windows), is the
129 creation time (see platform documentation for details).
130
131The interpretation of "file size" changes according to the file type. For plain
132files this is the size of the file in bytes. For FIFOs and sockets under most
133flavors of Unix (including Linux in particular), the "size" is the number of
134bytes waiting to be read at the time of the call to :func:`os.stat`,
135:func:`os.fstat`, or :func:`os.lstat`; this can sometimes be useful, especially
136for polling one of these special files after a non-blocking open. The meaning
137of the size field for other character and block devices varies more, depending
138on the implementation of the underlying system call.
139
140Example::
141
Jeroen Ruigrok van der Werven51497422009-02-19 18:52:21 +0000142 import os
143 import sys
Georg Brandl8ec7f652007-08-15 14:28:01 +0000144 from stat import *
145
146 def walktree(top, callback):
147 '''recursively descend the directory tree rooted at top,
148 calling the callback function for each regular file'''
149
150 for f in os.listdir(top):
151 pathname = os.path.join(top, f)
152 mode = os.stat(pathname)[ST_MODE]
153 if S_ISDIR(mode):
154 # It's a directory, recurse into it
155 walktree(pathname, callback)
156 elif S_ISREG(mode):
157 # It's a file, call the callback function
158 callback(pathname)
159 else:
160 # Unknown file type, print a message
161 print 'Skipping %s' % pathname
162
163 def visitfile(file):
164 print 'visiting', file
165
166 if __name__ == '__main__':
167 walktree(sys.argv[1], visitfile)
168