Source

cpython-withatomic / Doc / libstat.tex

The branch 'legacy-trunk' does not exist.
% By Skip Montanaro

\section{Standard Module \sectcode{stat}}
\stmodindex{stat}
\label{module-stat}

The \code{stat} module defines constants and functions for interpreting the
results of \code{os.stat()} and \code{os.lstat()} (if they exist).
For complete details about the \code{stat()} and \code{lstat()} system
calls, consult your local man pages.

The \code{stat} module defines the following functions:

\renewcommand{\indexsubitem}{(in module stat)}

\begin{funcdesc}{S_ISDIR}{mode}
Return non-zero if the mode was gotten from a directory file.
\end{funcdesc}

\begin{funcdesc}{S_ISCHR}{mode}
Return non-zero if the mode was gotten from a character special device.
\end{funcdesc}

\begin{funcdesc}{S_ISREG}{mode}
Return non-zero if the mode was gotten from a regular file.
\end{funcdesc}

\begin{funcdesc}{S_ISFIFO}{mode}
Return non-zero if the mode was gotten from a FIFO.
\end{funcdesc}

\begin{funcdesc}{S_ISLNK}{mode}
Return non-zero if the mode was gotten from a symbolic link.
\end{funcdesc}

\begin{funcdesc}{S_ISSOCK}{mode}
Return non-zero if the mode was gotten from a socket.
\end{funcdesc}

All the data items below are simply symbolic indexes into the 10-tuple
returned by \code{os.stat()} or \code{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 creation.
\end{datadesc}

Example:

\bcode\begin{verbatim}
import os, sys
from stat import *

def process(dir, func):
    '''recursively descend the directory rooted at dir, calling func for
       each regular file'''

    for f in os.listdir(dir):
        mode = os.stat('%s/%s' % (dir, f))[ST_MODE]
        if S_ISDIR(mode):
            # recurse into directory
            process('%s/%s' % (dir, f), func)
        elif S_ISREG(mode):
            func('%s/%s' % (dir, f))
        else:
            print 'Skipping %s/%s' % (dir, f)

def f(file):
    print 'frobbed', file

if __name__ == '__main__': process(sys.argv[1], f)
\end{verbatim}\ecode
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.