home *** CD-ROM | disk | FTP | other *** search
- <TITLE>marshal -- Python library reference</TITLE>
- Next: <A HREF="../i/imp" TYPE="Next">imp</A>
- Prev: <A HREF="../c/copy" TYPE="Prev">copy</A>
- Up: <A HREF="../p/python_services" TYPE="Up">Python Services</A>
- Top: <A HREF="../t/top" TYPE="Top">Top</A>
- <H1>3.7. Built-in Module <CODE>marshal</CODE></H1>
- 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
- 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).<A NAME="footnoteref1" HREF="#footnotetext1">(1)</A>
- <P>
- This is not a general ``persistency'' module. For general persistency
- and transfer of Python objects through RPC calls, see the modules
- <CODE>pickle</CODE> and <CODE>shelve</CODE>. The <CODE>marshal</CODE> module exists
- mainly to support reading and writing the ``pseudo-compiled'' code for
- Python modules of `<SAMP>.pyc</SAMP>' files.
- 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</CODE>, 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
- (they will cause infinite loops).
- <P>
- <B>Caveat:</B> On machines where C's <CODE>long int</CODE> type has more than
- 32 bits (such as the DEC Alpha), it
- is possible to create plain Python integers that are longer than 32
- bits. Since the current <CODE>marshal</CODE> 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</CODE> instead.<A NAME="footnoteref2" HREF="#footnotetext2">(2)</A>
- <P>
- There are functions that read/write files as well as functions
- operating on strings.
- <P>
- The module defines these functions:
- <P>
- <DL><DT><B>dump</B> (<VAR>value</VAR>, <VAR>file</VAR>) -- function of module marshal<DD>
- 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</CODE> or returned by <CODE>open()</CODE> or
- <CODE>posix.popen()</CODE>.
- <P>
- If the value has (or contains an object that has) an unsupported type,
- a <CODE>ValueError</CODE> exception is raised -- but garbage data will also
- be written to the file. The object will not be properly read back by
- <CODE>load()</CODE>.
- </DL>
- <DL><DT><B>load</B> (<VAR>file</VAR>) -- function of module marshal<DD>
- Read one value from the open file and return it. If no valid value
- is read, raise <CODE>EOFError</CODE>, <CODE>ValueError</CODE> or
- <CODE>TypeError</CODE>. The file must be an open file object.
- <P>
- Warning: If an object containing an unsupported type was marshalled
- with <CODE>dump()</CODE>, <CODE>load()</CODE> will substitute <CODE>None</CODE> for the
- unmarshallable type.
- </DL>
- <DL><DT><B>dumps</B> (<VAR>value</VAR>) -- function of module marshal<DD>
- Return the string that would be written to a file by
- <CODE>dump(value, file)</CODE>. The value must be a supported type.
- Raise a <CODE>ValueError</CODE> exception if value has (or contains an
- object that has) an unsupported type.
- </DL>
- <DL><DT><B>loads</B> (<VAR>string</VAR>) -- function of module marshal<DD>
- Convert the string to a value. If no valid value is found, raise
- <CODE>EOFError</CODE>, <CODE>ValueError</CODE> or <CODE>TypeError</CODE>. Extra
- characters in the string are ignored.
- </DL>
- <H2>---------- Footnotes ----------</H2>
- <A NAME="footnotetext1" HREF="#footnoteref1">(1)</A>
- 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.<P>
- <A NAME="footnotetext2" HREF="#footnoteref2">(2)</A>
- 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</CODE> module raise an exception when an integer value
- would be truncated. At least one of these solutions will be
- implemented in a future version.<P>
-