blob: 596e06ca7e59270c34d8ced68dee0f340eb9ee2e [file] [log] [blame]
Fred Drake295da241998-08-10 19:42:37 +00001\section{\module{stat} ---
Fred Drakef6863c11999-03-02 16:37:17 +00002 Interpreting \function{stat()} results}
3
Fred Drakeb91e9341998-07-23 17:59:49 +00004\declaremodule{standard}{stat}
Fred Drake399fea81998-08-06 21:30:32 +00005\modulesynopsis{Utilities for interpreting the results of
Fred Drakef6863c11999-03-02 16:37:17 +00006 \function{os.stat()}, \function{os.lstat()} and \function{os.fstat()}.}
7\sectionauthor{Skip Montanaro}{skip@automatrix.com}
Fred Drakeb91e9341998-07-23 17:59:49 +00008
Guido van Rossume8e9ed11996-12-19 22:39:22 +00009
Fred Drake295da241998-08-10 19:42:37 +000010The \module{stat} module defines constants and functions for
Fred Drakeca69a031999-04-22 14:55:43 +000011interpreting the results of \function{os.stat()},
12\function{os.fstat()} and \function{os.lstat()} (if they exist). For
13complete details about the \cfunction{stat()}, \cfunction{fstat()} and
14\cfunction{lstat()} calls, consult the documentation for your system.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000015
Fred Drake154fc6d1999-04-23 20:54:57 +000016The \module{stat} module defines the following functions to test for
17specific file types:
Guido van Rossume8e9ed11996-12-19 22:39:22 +000018
Guido van Rossume8e9ed11996-12-19 22:39:22 +000019
20\begin{funcdesc}{S_ISDIR}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000021Return non-zero if the mode is from a directory.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000022\end{funcdesc}
23
24\begin{funcdesc}{S_ISCHR}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000025Return non-zero if the mode is from a character special device file.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000026\end{funcdesc}
27
Guido van Rossumc45c2f31998-01-29 22:03:41 +000028\begin{funcdesc}{S_ISBLK}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000029Return non-zero if the mode is from a block special device file.
Guido van Rossumc45c2f31998-01-29 22:03:41 +000030\end{funcdesc}
31
Guido van Rossume8e9ed11996-12-19 22:39:22 +000032\begin{funcdesc}{S_ISREG}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000033Return non-zero if the mode is from a regular file.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000034\end{funcdesc}
35
36\begin{funcdesc}{S_ISFIFO}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000037Return non-zero if the mode is from a FIFO (named pipe).
Guido van Rossume8e9ed11996-12-19 22:39:22 +000038\end{funcdesc}
39
40\begin{funcdesc}{S_ISLNK}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000041Return non-zero if the mode is from a symbolic link.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000042\end{funcdesc}
43
44\begin{funcdesc}{S_ISSOCK}{mode}
Fred Drake154fc6d1999-04-23 20:54:57 +000045Return non-zero if the mode is from a socket.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000046\end{funcdesc}
47
Fred Drake154fc6d1999-04-23 20:54:57 +000048Two additional functions are defined for more general manipulation of
49the file's mode:
50
51\begin{funcdesc}{S_IMODE}{mode}
52Return the portion of the file's mode that can be set by
53\function{os.chmod()}---that is, the file's permission bits, plus the
54sticky bit, set-group-id, and set-user-id bits (on systems that support
55them).
56\end{funcdesc}
57
58\begin{funcdesc}{S_IFMT}{mode}
59Return the portion of the file's mode that describes the file type (used
60by the \function{S_IS*()} functions above).
61\end{funcdesc}
62
63Normally, you would use the \function{os.path.is*()} functions for
64testing the type of a file; the functions here are useful when you are
65doing multiple tests of the same file and wish to avoid the overhead of
66the \cfunction{stat()} system call for each test. These are also
67useful when checking for information about a file that isn't handled
68by \refmodule{os.path}, like the tests for block and character
69devices.
70
71All the variables below are simply symbolic indexes into the 10-tuple
Fred Drakeca69a031999-04-22 14:55:43 +000072returned by \function{os.stat()}, \function{os.fstat()} or
73\function{os.lstat()}.
Guido van Rossume8e9ed11996-12-19 22:39:22 +000074
75\begin{datadesc}{ST_MODE}
76Inode protection mode.
77\end{datadesc}
78
79\begin{datadesc}{ST_INO}
80Inode number.
81\end{datadesc}
82
83\begin{datadesc}{ST_DEV}
84Device inode resides on.
85\end{datadesc}
86
87\begin{datadesc}{ST_NLINK}
88Number of links to the inode.
89\end{datadesc}
90
91\begin{datadesc}{ST_UID}
92User id of the owner.
93\end{datadesc}
94
95\begin{datadesc}{ST_GID}
96Group id of the owner.
97\end{datadesc}
98
99\begin{datadesc}{ST_SIZE}
100File size in bytes.
101\end{datadesc}
102
103\begin{datadesc}{ST_ATIME}
104Time of last access.
105\end{datadesc}
106
107\begin{datadesc}{ST_MTIME}
108Time of last modification.
109\end{datadesc}
110
111\begin{datadesc}{ST_CTIME}
Guido van Rossumae2be711998-04-08 22:44:25 +0000112Time of last status change (see manual pages for details).
Guido van Rossume8e9ed11996-12-19 22:39:22 +0000113\end{datadesc}
114
115Example:
116
Fred Drake19479911998-02-13 06:58:54 +0000117\begin{verbatim}
Guido van Rossume8e9ed11996-12-19 22:39:22 +0000118import os, sys
119from stat import *
120
121def process(dir, func):
122 '''recursively descend the directory rooted at dir, calling func for
123 each regular file'''
124
125 for f in os.listdir(dir):
126 mode = os.stat('%s/%s' % (dir, f))[ST_MODE]
127 if S_ISDIR(mode):
128 # recurse into directory
129 process('%s/%s' % (dir, f), func)
130 elif S_ISREG(mode):
131 func('%s/%s' % (dir, f))
132 else:
133 print 'Skipping %s/%s' % (dir, f)
134
135def f(file):
136 print 'frobbed', file
137
Fred Drake50ae47b1999-04-05 19:26:16 +0000138if __name__ == '__main__':
139 process(sys.argv[1], f)
Fred Drake19479911998-02-13 06:58:54 +0000140\end{verbatim}