| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \section{\module{shutil} --- | 
					
						
							| 
									
										
										
										
											1999-02-01 21:27:59 +00:00
										 |  |  |          High-level file operations} | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \declaremodule{standard}{shutil} | 
					
						
							| 
									
										
										
										
											1999-02-01 21:27:59 +00:00
										 |  |  | \modulesynopsis{High-level file operations, including copying.} | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org} | 
					
						
							|  |  |  | % partly based on the docstrings
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The \module{shutil} module offers a number of high-level operations on | 
					
						
							|  |  |  | files and collections of files.  In particular, functions are provided  | 
					
						
							|  |  |  | which support file copying and removal. | 
					
						
							| 
									
										
										
										
											1998-12-28 21:58:57 +00:00
										 |  |  | \index{file!copying} | 
					
						
							|  |  |  | \index{copying files} | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \strong{Caveat:}  On MacOS, the resource fork and other metadata are | 
					
						
							|  |  |  | not used.  For file copies, this means that resources will be lost and  | 
					
						
							|  |  |  | file type and creator codes will not be correct. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{copyfile}{src, dst} | 
					
						
							| 
									
										
										
										
											2001-03-02 16:46:42 +00:00
										 |  |  |   Copy the contents of the file named \var{src} to a file named | 
					
						
							| 
									
										
										
										
											2004-05-05 17:21:51 +00:00
										 |  |  |   \var{dst}.  The destination location must be writable; otherwise,  | 
					
						
							|  |  |  |   an \exception{IOError} exception will be raised. | 
					
						
							|  |  |  |   If \var{dst} already exists, it will be replaced.   | 
					
						
							|  |  |  |   Special files such as character or block devices | 
					
						
							|  |  |  |   and pipes cannot be copied with this function.  \var{src} and | 
					
						
							| 
									
										
										
										
											2001-09-04 18:26:27 +00:00
										 |  |  |   \var{dst} are path names given as strings. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-07-31 15:45:46 +00:00
										 |  |  | \begin{funcdesc}{copyfileobj}{fsrc, fdst\optional{, length}} | 
					
						
							|  |  |  |   Copy the contents of the file-like object \var{fsrc} to the | 
					
						
							|  |  |  |   file-like object \var{fdst}.  The integer \var{length}, if given, | 
					
						
							|  |  |  |   is the buffer size. In particular, a negative \var{length} value | 
					
						
							|  |  |  |   means to copy the data without looping over the source data in | 
					
						
							|  |  |  |   chunks; by default the data is read in chunks to avoid uncontrolled | 
					
						
							|  |  |  |   memory consumption. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \begin{funcdesc}{copymode}{src, dst} | 
					
						
							|  |  |  |   Copy the permission bits from \var{src} to \var{dst}.  The file | 
					
						
							| 
									
										
										
										
											2001-09-04 18:26:27 +00:00
										 |  |  |   contents, owner, and group are unaffected.  \var{src} and \var{dst} | 
					
						
							|  |  |  |   are path names given as strings. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{copystat}{src, dst} | 
					
						
							|  |  |  |   Copy the permission bits, last access time, and last modification | 
					
						
							|  |  |  |   time from \var{src} to \var{dst}.  The file contents, owner, and | 
					
						
							| 
									
										
										
										
											2001-09-04 18:26:27 +00:00
										 |  |  |   group are unaffected.  \var{src} and \var{dst} are path names given | 
					
						
							|  |  |  |   as strings. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{copy}{src, dst} | 
					
						
							|  |  |  |   Copy the file \var{src} to the file or directory \var{dst}.  If | 
					
						
							|  |  |  |   \var{dst} is a directory, a file with the same basename as \var{src}  | 
					
						
							|  |  |  |   is created (or overwritten) in the directory specified.  Permission | 
					
						
							| 
									
										
										
										
											2001-09-04 18:26:27 +00:00
										 |  |  |   bits are copied.  \var{src} and \var{dst} are path names given as | 
					
						
							|  |  |  |   strings. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{copy2}{src, dst} | 
					
						
							|  |  |  |   Similar to \function{copy()}, but last access time and last | 
					
						
							|  |  |  |   modification time are copied as well.  This is similar to the | 
					
						
							| 
									
										
										
										
											1999-11-09 18:03:00 +00:00
										 |  |  |   \UNIX{} command \program{cp} \programopt{-p}. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{copytree}{src, dst\optional{, symlinks}} | 
					
						
							|  |  |  |   Recursively copy an entire directory tree rooted at \var{src}.  The | 
					
						
							|  |  |  |   destination directory, named by \var{dst}, must not already exist; | 
					
						
							| 
									
										
										
										
											2005-01-08 12:31:29 +00:00
										 |  |  |   it will be created as well as missing parent directories. | 
					
						
							|  |  |  |   Permissions and times of directories are copied with \function{copystat()}, | 
					
						
							|  |  |  |   individual files are copied using \function{copy2()}.   | 
					
						
							|  |  |  |   If \var{symlinks} is true, symbolic links in | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  |   the source tree are represented as symbolic links in the new tree; | 
					
						
							|  |  |  |   if false or omitted, the contents of the linked files are copied to | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   the new tree.  If exception(s) occur, an \exception{Error} is raised | 
					
						
							| 
									
										
										
										
											2003-02-23 21:36:47 +00:00
										 |  |  |   with a list of reasons. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   The source code for this should be considered an example rather than  | 
					
						
							|  |  |  |   a tool. | 
					
						
							| 
									
										
										
										
											2005-01-08 12:31:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |   \versionchanged[\exception{Error} is raised if any exceptions occur during | 
					
						
							|  |  |  |                   copying, rather than printing a message]{2.3} | 
					
						
							| 
									
										
										
										
											2005-01-08 12:31:29 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   \versionchanged[Create intermediate directories needed to create \var{dst}, | 
					
						
							| 
									
										
										
										
											2006-04-21 10:40:58 +00:00
										 |  |  |                   rather than raising an error. Copy permissions and times of | 
					
						
							|  |  |  | 		  directories using \function{copystat()}]{2.5} | 
					
						
							| 
									
										
										
										
											2005-01-08 12:31:29 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{rmtree}{path\optional{, ignore_errors\optional{, onerror}}} | 
					
						
							| 
									
										
										
										
											2003-01-24 17:33:30 +00:00
										 |  |  |   Delete an entire directory tree.\index{directory!deleting} | 
					
						
							|  |  |  |   If \var{ignore_errors} is true, | 
					
						
							| 
									
										
										
										
											2002-06-18 14:31:04 +00:00
										 |  |  |   errors resulting from failed removals will be ignored; if false or | 
					
						
							|  |  |  |   omitted, such errors are handled by calling a handler specified by | 
					
						
							|  |  |  |   \var{onerror} or, if that is omitted, they raise an exception. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   If \var{onerror} is provided, it must be a callable that accepts | 
					
						
							|  |  |  |   three parameters: \var{function}, \var{path}, and \var{excinfo}. | 
					
						
							|  |  |  |   The first parameter, \var{function}, is the function which raised | 
					
						
							| 
									
										
										
										
											2004-07-14 00:48:58 +00:00
										 |  |  |   the exception; it will be \function{os.listdir()}, \function{os.remove()} or | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  |   \function{os.rmdir()}.  The second parameter, \var{path}, will be | 
					
						
							|  |  |  |   the path name passed to \var{function}.  The third parameter, | 
					
						
							|  |  |  |   \var{excinfo}, will be the exception information return by | 
					
						
							|  |  |  |   \function{sys.exc_info()}.  Exceptions raised by \var{onerror} will | 
					
						
							|  |  |  |   not be caught. | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-10-07 13:23:24 +00:00
										 |  |  | \begin{funcdesc}{move}{src, dst} | 
					
						
							|  |  |  | Recursively move a file or directory to another location. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If the destination is on our current filesystem, then simply use | 
					
						
							|  |  |  | rename.  Otherwise, copy src to the dst and then remove src. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \versionadded{2.3} | 
					
						
							|  |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{excdesc}{Error} | 
					
						
							|  |  |  | This exception collects exceptions that raised during a mult-file | 
					
						
							|  |  |  | operation. For \function{copytree}, the exception argument is a | 
					
						
							|  |  |  | list of 3-tuples (\var{srcname}, \var{dstname}, \var{exception}). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \versionadded{2.3} | 
					
						
							|  |  |  | \end{excdesc} | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \subsection{Example \label{shutil-example}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This example is the implementation of the \function{copytree()} | 
					
						
							| 
									
										
										
										
											1999-04-21 17:08:51 +00:00
										 |  |  | function, described above, with the docstring omitted.  It | 
					
						
							|  |  |  | demonstrates many of the other functions provided by this module. | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | \begin{verbatim} | 
					
						
							|  |  |  | def copytree(src, dst, symlinks=0): | 
					
						
							|  |  |  |     names = os.listdir(src) | 
					
						
							|  |  |  |     os.mkdir(dst) | 
					
						
							|  |  |  |     for name in names: | 
					
						
							|  |  |  |         srcname = os.path.join(src, name) | 
					
						
							|  |  |  |         dstname = os.path.join(dst, name) | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             if symlinks and os.path.islink(srcname): | 
					
						
							|  |  |  |                 linkto = os.readlink(srcname) | 
					
						
							|  |  |  |                 os.symlink(linkto, dstname) | 
					
						
							|  |  |  |             elif os.path.isdir(srcname): | 
					
						
							| 
									
										
										
										
											2002-06-30 04:43:20 +00:00
										 |  |  |                 copytree(srcname, dstname, symlinks) | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  |             else: | 
					
						
							|  |  |  |                 copy2(srcname, dstname) | 
					
						
							| 
									
										
										
										
											2007-01-10 16:19:56 +00:00
										 |  |  |         except (IOError, os.error) as why: | 
					
						
							| 
									
										
										
										
											1998-12-28 20:16:58 +00:00
										 |  |  |             print "Can't copy %s to %s: %s" % (`srcname`, `dstname`, str(why))
 | 
					
						
							|  |  |  | \end{verbatim} |