cinap_lenrekadd hg and python4bb9e2215 years agoHistory
157 lines · 4.7 KB · TeX
RawDownload
\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 forinterpreting the results of \function{os.stat()},\function{os.fstat()} and \function{os.lstat()} (if they exist).  Forcomplete 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 forspecific 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 ofthe 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 thesticky bit, set-group-id, and set-user-id bits (on systems that supportthem).\end{funcdesc} \begin{funcdesc}{S_IFMT}{mode}Return the portion of the file's mode that describes the file type (usedby the \function{S_IS*()} functions above).\end{funcdesc} Normally, you would use the \function{os.path.is*()} functions fortesting the type of a file; the functions here are useful when you aredoing multiple tests of the same file and wish to avoid the overhead ofthe \cfunction{stat()} system call for each test.  These are alsouseful when checking for information about a file that isn't handledby \refmodule{os.path}, like the tests for block and characterdevices. All the variables below are simply symbolic indexes into the 10-tuplereturned 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}Size in bytes of a plain file; amount of data waiting on some specialfiles.\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}The ``ctime'' as reported by the operating system.  On some systems(like \UNIX) is the time of the last metadata change, and, on others(like Windows), is the creation time (see platform documentation fordetails).\end{datadesc} The interpretation of ``file size'' changes according to the filetype.  For plain files this is the size of the file in bytes.  ForFIFOs and sockets under most flavors of \UNIX{} (including Linux inparticular), the ``size'' is the number of bytes waiting to be read atthe time of the call to \function{os.stat()}, \function{os.fstat()},or \function{os.lstat()}; this can sometimes be useful, especially forpolling one of these special files after a non-blocking open.  Themeaning of the size field for other character and block devices variesmore, depending on the implementation of the underlying system call. Example: \begin{verbatim}import os, sysfrom stat import * def walktree(top, callback):    '''recursively descend the directory tree rooted at top,       calling the callback function for each regular file'''     for f in os.listdir(top):        pathname = os.path.join(top, 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}