mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{\module{stat} ---
 | 
						|
         Interpreting \function{stat()} results}
 | 
						|
 | 
						|
\declaremodule{standard}{stat}
 | 
						|
\modulesynopsis{Utilities for interpreting the results of
 | 
						|
  \function{os.stat()}, \function{os.lstat()} and \function{os.fstat()}.}
 | 
						|
\sectionauthor{Skip Montanaro}{skip@automatrix.com}
 | 
						|
 | 
						|
 | 
						|
The \module{stat} module defines constants and functions for
 | 
						|
interpreting the results of \function{os.stat()},
 | 
						|
\function{os.fstat()} and \function{os.lstat()} (if they exist).  For
 | 
						|
complete details about the \cfunction{stat()}, \cfunction{fstat()} and
 | 
						|
\cfunction{lstat()} calls, consult the documentation for your system.
 | 
						|
 | 
						|
The \module{stat} module defines the following functions to test for
 | 
						|
specific file types:
 | 
						|
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISDIR}{mode}
 | 
						|
Return non-zero if the mode is from a directory.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISCHR}{mode}
 | 
						|
Return non-zero if the mode is from a character special device file.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISBLK}{mode}
 | 
						|
Return non-zero if the mode is from a block special device file.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISREG}{mode}
 | 
						|
Return non-zero if the mode is from a regular file.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISFIFO}{mode}
 | 
						|
Return non-zero if the mode is from a FIFO (named pipe).
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISLNK}{mode}
 | 
						|
Return non-zero if the mode is from a symbolic link.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_ISSOCK}{mode}
 | 
						|
Return non-zero if the mode is from a socket.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
Two additional functions are defined for more general manipulation of
 | 
						|
the file's mode:
 | 
						|
 | 
						|
\begin{funcdesc}{S_IMODE}{mode}
 | 
						|
Return the portion of the file's mode that can be set by
 | 
						|
\function{os.chmod()}---that is, the file's permission bits, plus the
 | 
						|
sticky bit, set-group-id, and set-user-id bits (on systems that support
 | 
						|
them).
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{S_IFMT}{mode}
 | 
						|
Return the portion of the file's mode that describes the file type (used
 | 
						|
by the \function{S_IS*()} functions above).
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
Normally, you would use the \function{os.path.is*()} functions for
 | 
						|
testing the type of a file; the functions here are useful when you are
 | 
						|
doing multiple tests of the same file and wish to avoid the overhead of
 | 
						|
the \cfunction{stat()} system call for each test.  These are also
 | 
						|
useful when checking for information about a file that isn't handled
 | 
						|
by \refmodule{os.path}, like the tests for block and character
 | 
						|
devices.
 | 
						|
 | 
						|
All the variables below are simply symbolic indexes into the 10-tuple
 | 
						|
returned by \function{os.stat()}, \function{os.fstat()} or
 | 
						|
\function{os.lstat()}.
 | 
						|
 | 
						|
\begin{datadesc}{ST_MODE}
 | 
						|
Inode protection mode.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_INO}
 | 
						|
Inode number.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_DEV}
 | 
						|
Device inode resides on.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_NLINK}
 | 
						|
Number of links to the inode.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_UID}
 | 
						|
User id of the owner.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_GID}
 | 
						|
Group id of the owner.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_SIZE}
 | 
						|
File size in bytes.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_ATIME}
 | 
						|
Time of last access.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_MTIME}
 | 
						|
Time of last modification.
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
\begin{datadesc}{ST_CTIME}
 | 
						|
Time of last status change (see manual pages for details).
 | 
						|
\end{datadesc}
 | 
						|
 | 
						|
Example:
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
import os, sys
 | 
						|
from stat import *
 | 
						|
 | 
						|
def walktree(dir, callback):
 | 
						|
    '''recursively descend the directory rooted at dir,
 | 
						|
       calling the callback function for each regular file'''
 | 
						|
 | 
						|
    for f in os.listdir(dir):
 | 
						|
        pathname = '%s/%s' % (dir, f)
 | 
						|
        mode = os.stat(pathname)[ST_MODE]
 | 
						|
        if S_ISDIR(mode):
 | 
						|
            # It's a directory, recurse into it
 | 
						|
            walktree(pathname, callback)
 | 
						|
        elif S_ISREG(mode):
 | 
						|
            # It's a file, call the callback function
 | 
						|
            callback(pathname)
 | 
						|
        else:
 | 
						|
            # Unknown file type, print a message
 | 
						|
            print 'Skipping %s' % pathname
 | 
						|
 | 
						|
def visitfile(file):
 | 
						|
    print 'visiting', file
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    walktree(sys.argv[1], visitfile)
 | 
						|
\end{verbatim}
 |