| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \section{Built-in Module \sectcode{marshal}} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \bimodindex{marshal} | 
					
						
							|  |  |  | This module contains functions that can read and write Python | 
					
						
							|  |  |  | values in a binary format.  The format is specific to Python, but | 
					
						
							|  |  |  | independent of machine architecture issues (e.g., you can write a | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | Python value to a file on a PC, transport the file to a Sun, and read | 
					
						
							|  |  |  | it back there).  Details of the format are undocumented on purpose; | 
					
						
							|  |  |  | it may change between Python versions (although it rarely does).%
 | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \footnote{The name of this module stems from a bit of terminology used | 
					
						
							|  |  |  | by the designers of Modula-3 (amongst others), who use the term | 
					
						
							|  |  |  | ``marshalling'' for shipping of data around in a self-contained form. | 
					
						
							|  |  |  | Strictly speaking, ``to marshal'' means to convert some data from | 
					
						
							|  |  |  | internal to external form (in an RPC buffer for instance) and | 
					
						
							|  |  |  | ``unmarshalling'' for the reverse process.} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | This is not a general ``persistency'' module.  For general persistency | 
					
						
							|  |  |  | and transfer of Python objects through RPC calls, see the modules | 
					
						
							|  |  |  | \code{pickle} and \code{shelve}.  The \code{marshal} module exists | 
					
						
							|  |  |  | mainly to support reading and writing the ``pseudo-compiled'' code for | 
					
						
							|  |  |  | Python modules of \samp{.pyc} files. | 
					
						
							|  |  |  | \stmodindex{pickle} | 
					
						
							|  |  |  | \stmodindex{shelve} | 
					
						
							|  |  |  | \obindex{code} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | Not all Python object types are supported; in general, only objects | 
					
						
							|  |  |  | whose value is independent from a particular invocation of Python can | 
					
						
							|  |  |  | be written and read by this module.  The following types are supported: | 
					
						
							|  |  |  | \code{None}, integers, long integers, floating point numbers, | 
					
						
							|  |  |  | strings, tuples, lists, dictionaries, and code objects, where it | 
					
						
							|  |  |  | should be understood that tuples, lists and dictionaries are only | 
					
						
							|  |  |  | supported as long as the values contained therein are themselves | 
					
						
							|  |  |  | supported; and recursive lists and dictionaries should not be written | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | (they will cause infinite loops). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {\bf Caveat:} On machines where C's \code{long int} type has more than | 
					
						
							| 
									
										
										
										
											1995-09-13 17:35:28 +00:00
										 |  |  | 32 bits (such as the DEC Alpha), it | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | is possible to create plain Python integers that are longer than 32 | 
					
						
							|  |  |  | bits.  Since the current \code{marshal} module uses 32 bits to | 
					
						
							|  |  |  | transfer plain Python integers, such values are silently truncated. | 
					
						
							|  |  |  | This particularly affects the use of very long integer literals in | 
					
						
							|  |  |  | Python modules --- these will be accepted by the parser on such | 
					
						
							|  |  |  | machines, but will be silently be truncated when the module is read | 
					
						
							|  |  |  | from the \code{.pyc} instead.%
 | 
					
						
							|  |  |  | \footnote{A solution would be to refuse such literals in the parser, | 
					
						
							|  |  |  | since they are inherently non-portable.  Another solution would be to | 
					
						
							|  |  |  | let the \code{marshal} module raise an exception when an integer value | 
					
						
							|  |  |  | would be truncated.  At least one of these solutions will be | 
					
						
							|  |  |  | implemented in a future version.} | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | There are functions that read/write files as well as functions | 
					
						
							|  |  |  | operating on strings. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The module defines these functions: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \renewcommand{\indexsubitem}{(in module marshal)} | 
					
						
							| 
									
										
										
										
											1995-03-17 16:07:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \begin{funcdesc}{dump}{value\, file} | 
					
						
							|  |  |  |   Write the value on the open file.  The value must be a supported | 
					
						
							|  |  |  |   type.  The file must be an open file object such as | 
					
						
							|  |  |  |   \code{sys.stdout} or returned by \code{open()} or | 
					
						
							|  |  |  |   \code{posix.popen()}. | 
					
						
							|  |  |  |    | 
					
						
							| 
									
										
										
										
											1996-06-26 20:20:57 +00:00
										 |  |  |   If the value has (or contains an object that has) an unsupported type, | 
					
						
							|  |  |  |   a \code{ValueError} exception is raised -- but garbage data will also | 
					
						
							|  |  |  |   be written to the file.  The object will not be properly read back by | 
					
						
							|  |  |  |   \code{load()}. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{load}{file} | 
					
						
							|  |  |  |   Read one value from the open file and return it.  If no valid value | 
					
						
							|  |  |  |   is read, raise \code{EOFError}, \code{ValueError} or | 
					
						
							|  |  |  |   \code{TypeError}.  The file must be an open file object. | 
					
						
							| 
									
										
										
										
											1996-06-26 20:20:57 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |   Warning: If an object containing an unsupported type was marshalled | 
					
						
							|  |  |  |   with \code{dump()}, \code{load()} will substitute \code{None} for the | 
					
						
							|  |  |  |   unmarshallable type. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{dumps}{value} | 
					
						
							|  |  |  |   Return the string that would be written to a file by | 
					
						
							|  |  |  |   \code{dump(value, file)}.  The value must be a supported type. | 
					
						
							| 
									
										
										
										
											1996-06-26 20:20:57 +00:00
										 |  |  |   Raise a \code{ValueError} exception if value has (or contains an | 
					
						
							|  |  |  |   object that has) an unsupported type. | 
					
						
							| 
									
										
										
										
											1994-01-02 01:22:07 +00:00
										 |  |  | \end{funcdesc} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | \begin{funcdesc}{loads}{string} | 
					
						
							|  |  |  |   Convert the string to a value.  If no valid value is found, raise | 
					
						
							|  |  |  |   \code{EOFError}, \code{ValueError} or \code{TypeError}.  Extra | 
					
						
							|  |  |  |   characters in the string are ignored. | 
					
						
							|  |  |  | \end{funcdesc} |