| Fred Drake | 295da24 | 1998-08-10 19:42:37 +0000 | [diff] [blame] | 1 | \section{\module{marshal} --- | 
| Fred Drake | c600475 | 1999-02-19 22:33:51 +0000 | [diff] [blame] | 2 |          Alternate Python object serialization} | 
| Fred Drake | b91e934 | 1998-07-23 17:59:49 +0000 | [diff] [blame] | 3 |  | 
| Fred Drake | ffbe687 | 1999-04-22 21:23:22 +0000 | [diff] [blame] | 4 | \declaremodule{builtin}{marshal} | 
| Fred Drake | 295da24 | 1998-08-10 19:42:37 +0000 | [diff] [blame] | 5 | \modulesynopsis{Convert Python objects to streams of bytes and back | 
| Fred Drake | ffbe687 | 1999-04-22 21:23:22 +0000 | [diff] [blame] | 6 |                 (with different constraints).} | 
| Fred Drake | b91e934 | 1998-07-23 17:59:49 +0000 | [diff] [blame] | 7 |  | 
| Fred Drake | 0c2af2b | 1998-03-08 06:28:00 +0000 | [diff] [blame] | 8 |  | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 9 | This module contains functions that can read and write Python | 
 | 10 | values in a binary format.  The format is specific to Python, but | 
 | 11 | independent of machine architecture issues (e.g., you can write a | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 12 | Python value to a file on a PC, transport the file to a Sun, and read | 
 | 13 | it back there).  Details of the format are undocumented on purpose; | 
| Fred Drake | ea003fc | 1999-04-05 21:59:15 +0000 | [diff] [blame] | 14 | it may change between Python versions (although it rarely | 
 | 15 | does).\footnote{The name of this module stems from a bit of | 
 | 16 |   terminology used by the designers of Modula-3 (amongst others), who | 
 | 17 |   use the term ``marshalling'' for shipping of data around in a | 
 | 18 |   self-contained form. Strictly speaking, ``to marshal'' means to | 
 | 19 |   convert some data from internal to external form (in an RPC buffer for | 
 | 20 |   instance) and ``unmarshalling'' for the reverse process.} | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 21 |  | 
| Thomas Wouters | f831663 | 2000-07-16 19:01:10 +0000 | [diff] [blame] | 22 | This is not a general ``persistence'' module.  For general persistence | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 23 | and transfer of Python objects through RPC calls, see the modules | 
| Fred Drake | ffbe687 | 1999-04-22 21:23:22 +0000 | [diff] [blame] | 24 | \refmodule{pickle} and \refmodule{shelve}.  The \module{marshal} module exists | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 25 | mainly to support reading and writing the ``pseudo-compiled'' code for | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 26 | Python modules of \file{.pyc} files. | 
| Fred Drake | 54820dc | 1997-12-15 21:56:05 +0000 | [diff] [blame] | 27 | \refstmodindex{pickle} | 
 | 28 | \refstmodindex{shelve} | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 29 | \obindex{code} | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 30 |  | 
 | 31 | Not all Python object types are supported; in general, only objects | 
 | 32 | whose value is independent from a particular invocation of Python can | 
 | 33 | be written and read by this module.  The following types are supported: | 
 | 34 | \code{None}, integers, long integers, floating point numbers, | 
| Fred Drake | 61098f2 | 2000-04-06 14:47:20 +0000 | [diff] [blame] | 35 | strings, Unicode objects, tuples, lists, dictionaries, and code | 
 | 36 | objects, where it should be understood that tuples, lists and | 
 | 37 | dictionaries are only supported as long as the values contained | 
 | 38 | therein are themselves supported; and recursive lists and dictionaries | 
 | 39 | should not be written (they will cause infinite loops). | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 40 |  | 
| Fred Drake | af8a015 | 1998-01-14 14:51:31 +0000 | [diff] [blame] | 41 | \strong{Caveat:} On machines where C's \code{long int} type has more than | 
| Guido van Rossum | 93cf55e | 1995-09-13 17:35:28 +0000 | [diff] [blame] | 42 | 32 bits (such as the DEC Alpha), it | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 43 | is possible to create plain Python integers that are longer than 32 | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 44 | bits.  Since the current \module{marshal} module uses 32 bits to | 
| Guido van Rossum | 470be14 | 1995-03-17 16:07:09 +0000 | [diff] [blame] | 45 | transfer plain Python integers, such values are silently truncated. | 
 | 46 | This particularly affects the use of very long integer literals in | 
 | 47 | Python modules --- these will be accepted by the parser on such | 
 | 48 | machines, but will be silently be truncated when the module is read | 
| Fred Drake | ea003fc | 1999-04-05 21:59:15 +0000 | [diff] [blame] | 49 | from the \file{.pyc} instead.\footnote{ | 
 | 50 |   A solution would be to refuse such literals in the parser, | 
 | 51 |   since they are inherently non-portable.  Another solution would be to | 
 | 52 |   let the \module{marshal} module raise an exception when an integer | 
 | 53 |   value would be truncated.  At least one of these solutions will be | 
 | 54 |   implemented in a future version.} | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 55 |  | 
 | 56 | There are functions that read/write files as well as functions | 
 | 57 | operating on strings. | 
 | 58 |  | 
 | 59 | The module defines these functions: | 
 | 60 |  | 
| Fred Drake | 0c2af2b | 1998-03-08 06:28:00 +0000 | [diff] [blame] | 61 | \begin{funcdesc}{dump}{value, file} | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 62 |   Write the value on the open file.  The value must be a supported | 
 | 63 |   type.  The file must be an open file object such as | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 64 |   \code{sys.stdout} or returned by \function{open()} or | 
| Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 65 |   \function{posix.popen()}.  It must be opened in binary mode | 
 | 66 |   (\code{'wb'} or \code{'w+b'}). | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 67 |  | 
| Guido van Rossum | bbb1e26 | 1996-06-26 20:20:57 +0000 | [diff] [blame] | 68 |   If the value has (or contains an object that has) an unsupported type, | 
| Fred Drake | 0c2af2b | 1998-03-08 06:28:00 +0000 | [diff] [blame] | 69 |   a \exception{ValueError} exception is raised --- but garbage data | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 70 |   will also be written to the file.  The object will not be properly | 
 | 71 |   read back by \function{load()}. | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 72 | \end{funcdesc} | 
 | 73 |  | 
 | 74 | \begin{funcdesc}{load}{file} | 
 | 75 |   Read one value from the open file and return it.  If no valid value | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 76 |   is read, raise \exception{EOFError}, \exception{ValueError} or | 
| Fred Drake | 38e5d27 | 2000-04-03 20:13:55 +0000 | [diff] [blame] | 77 |   \exception{TypeError}.  The file must be an open file object opened | 
 | 78 |   in binary mode (\code{'rb'} or \code{'r+b'}). | 
| Guido van Rossum | bbb1e26 | 1996-06-26 20:20:57 +0000 | [diff] [blame] | 79 |  | 
| Fred Drake | 0c2af2b | 1998-03-08 06:28:00 +0000 | [diff] [blame] | 80 |   \strong{Warning:} If an object containing an unsupported type was | 
 | 81 |   marshalled with \function{dump()}, \function{load()} will substitute | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 82 |   \code{None} for the unmarshallable type. | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 83 | \end{funcdesc} | 
 | 84 |  | 
 | 85 | \begin{funcdesc}{dumps}{value} | 
 | 86 |   Return the string that would be written to a file by | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 87 |   \code{dump(\var{value}, \var{file})}.  The value must be a supported | 
 | 88 |   type.  Raise a \exception{ValueError} exception if value has (or | 
 | 89 |   contains an object that has) an unsupported type. | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 90 | \end{funcdesc} | 
 | 91 |  | 
 | 92 | \begin{funcdesc}{loads}{string} | 
 | 93 |   Convert the string to a value.  If no valid value is found, raise | 
| Fred Drake | 7506298 | 1998-02-16 20:40:37 +0000 | [diff] [blame] | 94 |   \exception{EOFError}, \exception{ValueError} or | 
 | 95 |   \exception{TypeError}.  Extra characters in the string are ignored. | 
| Guido van Rossum | 5fdeeea | 1994-01-02 01:22:07 +0000 | [diff] [blame] | 96 | \end{funcdesc} |