2001-10-12 16:01:43 -03:00
|
|
|
\chapter{Utilities \label{utilities}}
|
|
|
|
|
|
|
|
The functions in this chapter perform various utility tasks, ranging
|
|
|
|
from helping C code be more portable across platforms, using Python
|
|
|
|
modules from C, and parsing function arguments and constructing Python
|
|
|
|
values from C values.
|
|
|
|
|
|
|
|
|
|
|
|
\section{Operating System Utilities \label{os}}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{Py_FdIsInteractive}{FILE *fp, char *filename}
|
|
|
|
Return true (nonzero) if the standard I/O file \var{fp} with name
|
|
|
|
\var{filename} is deemed interactive. This is the case for files
|
|
|
|
for which \samp{isatty(fileno(\var{fp}))} is true. If the global
|
|
|
|
flag \cdata{Py_InteractiveFlag} is true, this function also returns
|
|
|
|
true if the \var{filename} pointer is \NULL{} or if the name is
|
|
|
|
equal to one of the strings \code{'<stdin>'} or \code{'???'}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{long}{PyOS_GetLastModificationTime}{char *filename}
|
|
|
|
Return the time of last modification of the file \var{filename}.
|
|
|
|
The result is encoded in the same way as the timestamp returned by
|
|
|
|
the standard C library function \cfunction{time()}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{PyOS_AfterFork}{}
|
|
|
|
Function to update some internal state after a process fork; this
|
|
|
|
should be called in the new process if the Python interpreter will
|
|
|
|
continue to be used. If a new executable is loaded into the new
|
|
|
|
process, this function does not need to be called.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyOS_CheckStack}{}
|
|
|
|
Return true when the interpreter runs out of stack space. This is a
|
|
|
|
reliable check, but is only available when \constant{USE_STACKCHECK}
|
|
|
|
is defined (currently on Windows using the Microsoft Visual \Cpp{}
|
|
|
|
compiler and on the Macintosh). \constant{USE_CHECKSTACK} will be
|
|
|
|
defined automatically; you should never change the definition in
|
|
|
|
your own code.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyOS_sighandler_t}{PyOS_getsig}{int i}
|
|
|
|
Return the current signal handler for signal \var{i}. This is a
|
|
|
|
thin wrapper around either \cfunction{sigaction()} or
|
|
|
|
\cfunction{signal()}. Do not call those functions directly!
|
|
|
|
\ctype{PyOS_sighandler_t} is a typedef alias for \ctype{void
|
|
|
|
(*)(int)}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyOS_sighandler_t}{PyOS_setsig}{int i, PyOS_sighandler_t h}
|
|
|
|
Set the signal handler for signal \var{i} to be \var{h}; return the
|
|
|
|
old signal handler. This is a thin wrapper around either
|
|
|
|
\cfunction{sigaction()} or \cfunction{signal()}. Do not call those
|
|
|
|
functions directly! \ctype{PyOS_sighandler_t} is a typedef alias
|
|
|
|
for \ctype{void (*)(int)}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
|
|
|
|
\section{Process Control \label{processControl}}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{Py_FatalError}{char *message}
|
|
|
|
Print a fatal error message and kill the process. No cleanup is
|
|
|
|
performed. This function should only be invoked when a condition is
|
|
|
|
detected that would make it dangerous to continue using the Python
|
|
|
|
interpreter; e.g., when the object administration appears to be
|
|
|
|
corrupted. On \UNIX, the standard C library function
|
|
|
|
\cfunction{abort()}\ttindex{abort()} is called which will attempt to
|
|
|
|
produce a \file{core} file.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{Py_Exit}{int status}
|
|
|
|
Exit the current process. This calls
|
|
|
|
\cfunction{Py_Finalize()}\ttindex{Py_Finalize()} and then calls the
|
|
|
|
standard C library function
|
|
|
|
\code{exit(\var{status})}\ttindex{exit()}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{Py_AtExit}{void (*func) ()}
|
|
|
|
Register a cleanup function to be called by
|
|
|
|
\cfunction{Py_Finalize()}\ttindex{Py_Finalize()}. The cleanup
|
|
|
|
function will be called with no arguments and should return no
|
|
|
|
value. At most 32 \index{cleanup functions}cleanup functions can be
|
|
|
|
registered. When the registration is successful,
|
|
|
|
\cfunction{Py_AtExit()} returns \code{0}; on failure, it returns
|
|
|
|
\code{-1}. The cleanup function registered last is called first.
|
|
|
|
Each cleanup function will be called at most once. Since Python's
|
|
|
|
internal finallization will have completed before the cleanup
|
|
|
|
function, no Python APIs should be called by \var{func}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
|
|
|
|
\section{Importing Modules \label{importing}}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModule}{char *name}
|
|
|
|
This is a simplified interface to
|
|
|
|
\cfunction{PyImport_ImportModuleEx()} below, leaving the
|
|
|
|
\var{globals} and \var{locals} arguments set to \NULL. When the
|
|
|
|
\var{name} argument contains a dot (when it specifies a submodule of
|
|
|
|
a package), the \var{fromlist} argument is set to the list
|
|
|
|
\code{['*']} so that the return value is the named module rather
|
|
|
|
than the top-level package containing it as would otherwise be the
|
|
|
|
case. (Unfortunately, this has an additional side effect when
|
|
|
|
\var{name} in fact specifies a subpackage instead of a submodule:
|
|
|
|
the submodules specified in the package's \code{__all__} variable
|
|
|
|
are \index{package variable!\code{__all__}}
|
|
|
|
\withsubitem{(package variable)}{\ttindex{__all__}}loaded.) Return
|
|
|
|
a new reference to the imported module, or \NULL{} with an exception
|
|
|
|
set on failure (the module may still be created in this case ---
|
|
|
|
examine \code{sys.modules} to find out).
|
|
|
|
\withsubitem{(in module sys)}{\ttindex{modules}}
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_ImportModuleEx}{char *name,
|
|
|
|
PyObject *globals, PyObject *locals, PyObject *fromlist}
|
|
|
|
Import a module. This is best described by referring to the
|
|
|
|
built-in Python function
|
|
|
|
\function{__import__()}\bifuncindex{__import__}, as the standard
|
|
|
|
\function{__import__()} function calls this function directly.
|
|
|
|
|
|
|
|
The return value is a new reference to the imported module or
|
|
|
|
top-level package, or \NULL{} with an exception set on failure (the
|
|
|
|
module may still be created in this case). Like for
|
|
|
|
\function{__import__()}, the return value when a submodule of a
|
|
|
|
package was requested is normally the top-level package, unless a
|
|
|
|
non-empty \var{fromlist} was given.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_Import}{PyObject *name}
|
|
|
|
This is a higher-level interface that calls the current ``import
|
|
|
|
hook function''. It invokes the \function{__import__()} function
|
|
|
|
from the \code{__builtins__} of the current globals. This means
|
|
|
|
that the import is done using whatever import hooks are installed in
|
|
|
|
the current environment, e.g. by \module{rexec}\refstmodindex{rexec}
|
|
|
|
or \module{ihooks}\refstmodindex{ihooks}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_ReloadModule}{PyObject *m}
|
|
|
|
Reload a module. This is best described by referring to the
|
|
|
|
built-in Python function \function{reload()}\bifuncindex{reload}, as
|
|
|
|
the standard \function{reload()} function calls this function
|
|
|
|
directly. Return a new reference to the reloaded module, or \NULL{}
|
|
|
|
with an exception set on failure (the module still exists in this
|
|
|
|
case).
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_AddModule}{char *name}
|
|
|
|
Return the module object corresponding to a module name. The
|
|
|
|
\var{name} argument may be of the form \code{package.module}).
|
|
|
|
First check the modules dictionary if there's one there, and if not,
|
|
|
|
create a new one and insert in in the modules dictionary.
|
|
|
|
\note{This function does not load or import the module; if the
|
|
|
|
module wasn't already loaded, you will get an empty module object.
|
|
|
|
Use \cfunction{PyImport_ImportModule()} or one of its variants to
|
|
|
|
import a module. Return \NULL{} with an exception set on failure.}
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_ExecCodeModule}{char *name, PyObject *co}
|
|
|
|
Given a module name (possibly of the form \code{package.module}) and
|
|
|
|
a code object read from a Python bytecode file or obtained from the
|
|
|
|
built-in function \function{compile()}\bifuncindex{compile}, load
|
|
|
|
the module. Return a new reference to the module object, or \NULL{}
|
|
|
|
with an exception set if an error occurred (the module may still be
|
|
|
|
created in this case). (This function would reload the module if it
|
|
|
|
was already imported.)
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{long}{PyImport_GetMagicNumber}{}
|
|
|
|
Return the magic number for Python bytecode files
|
|
|
|
(a.k.a. \file{.pyc} and \file{.pyo} files). The magic number should
|
|
|
|
be present in the first four bytes of the bytecode file, in
|
|
|
|
little-endian byte order.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyImport_GetModuleDict}{}
|
|
|
|
Return the dictionary used for the module administration
|
|
|
|
(a.k.a.\ \code{sys.modules}). Note that this is a per-interpreter
|
|
|
|
variable.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{_PyImport_Init}{}
|
|
|
|
Initialize the import mechanism. For internal use only.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{PyImport_Cleanup}{}
|
|
|
|
Empty the module table. For internal use only.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{_PyImport_Fini}{}
|
|
|
|
Finalize the import mechanism. For internal use only.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{_PyImport_FindExtension}{char *, char *}
|
|
|
|
For internal use only.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{_PyImport_FixupExtension}{char *, char *}
|
|
|
|
For internal use only.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyImport_ImportFrozenModule}{char *name}
|
|
|
|
Load a frozen module named \var{name}. Return \code{1} for success,
|
|
|
|
\code{0} if the module is not found, and \code{-1} with an exception
|
|
|
|
set if the initialization failed. To access the imported module on
|
|
|
|
a successful load, use \cfunction{PyImport_ImportModule()}. (Note
|
|
|
|
the misnomer --- this function would reload the module if it was
|
|
|
|
already imported.)
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{ctypedesc}[_frozen]{struct _frozen}
|
|
|
|
This is the structure type definition for frozen module descriptors,
|
|
|
|
as generated by the \program{freeze}\index{freeze utility} utility
|
|
|
|
(see \file{Tools/freeze/} in the Python source distribution). Its
|
|
|
|
definition, found in \file{Include/import.h}, is:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
struct _frozen {
|
|
|
|
char *name;
|
|
|
|
unsigned char *code;
|
|
|
|
int size;
|
|
|
|
};
|
|
|
|
\end{verbatim}
|
|
|
|
\end{ctypedesc}
|
|
|
|
|
|
|
|
\begin{cvardesc}{struct _frozen*}{PyImport_FrozenModules}
|
|
|
|
This pointer is initialized to point to an array of \ctype{struct
|
|
|
|
_frozen} records, terminated by one whose members are all \NULL{} or
|
|
|
|
zero. When a frozen module is imported, it is searched in this
|
|
|
|
table. Third-party code could play tricks with this to provide a
|
|
|
|
dynamically created collection of frozen modules.
|
|
|
|
\end{cvardesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyImport_AppendInittab}{char *name,
|
|
|
|
void (*initfunc)(void)}
|
|
|
|
Add a single module to the existing table of built-in modules. This
|
|
|
|
is a convenience wrapper around
|
|
|
|
\cfunction{PyImport_ExtendInittab()}, returning \code{-1} if the
|
|
|
|
table could not be extended. The new module can be imported by the
|
|
|
|
name \var{name}, and uses the function \var{initfunc} as the
|
|
|
|
initialization function called on the first attempted import. This
|
|
|
|
should be called before \cfunction{Py_Initialize()}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{ctypedesc}[_inittab]{struct _inittab}
|
|
|
|
Structure describing a single entry in the list of built-in
|
|
|
|
modules. Each of these structures gives the name and initialization
|
|
|
|
function for a module built into the interpreter. Programs which
|
|
|
|
embed Python may use an array of these structures in conjunction
|
|
|
|
with \cfunction{PyImport_ExtendInittab()} to provide additional
|
|
|
|
built-in modules. The structure is defined in
|
|
|
|
\file{Include/import.h} as:
|
|
|
|
|
|
|
|
\begin{verbatim}
|
|
|
|
struct _inittab {
|
|
|
|
char *name;
|
|
|
|
void (*initfunc)(void);
|
|
|
|
};
|
|
|
|
\end{verbatim}
|
|
|
|
\end{ctypedesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyImport_ExtendInittab}{struct _inittab *newtab}
|
|
|
|
Add a collection of modules to the table of built-in modules. The
|
|
|
|
\var{newtab} array must end with a sentinel entry which contains
|
|
|
|
\NULL{} for the \member{name} field; failure to provide the sentinel
|
|
|
|
value can result in a memory fault. Returns \code{0} on success or
|
|
|
|
\code{-1} if insufficient memory could be allocated to extend the
|
|
|
|
internal table. In the event of failure, no modules are added to
|
|
|
|
the internal table. This should be called before
|
|
|
|
\cfunction{Py_Initialize()}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
|
2001-10-14 01:45:51 -03:00
|
|
|
\section{Data marshalling support \label{marshalling-utils}}
|
|
|
|
|
|
|
|
These routines allow C code to work with serialized objects using the
|
|
|
|
same data format as the \module{marshal} module. There are functions
|
|
|
|
to write data into the serialization format, and additional functions
|
|
|
|
that can be used to read the data back. Files used to store marshalled
|
|
|
|
data must be opened in binary mode.
|
|
|
|
|
|
|
|
Numeric values are stored with the least significant byte first.
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{PyMarshal_WriteLongToFile}{long value, FILE *file}
|
|
|
|
Marshal a \ctype{long} integer, \var{value}, to \var{file}. This
|
|
|
|
will only write the least-significant 32 bits of \var{value};
|
|
|
|
regardless of the size of the native \ctype{long} type.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{PyMarshal_WriteShortToFile}{short value, FILE *file}
|
|
|
|
Marshal a \ctype{short} integer, \var{value}, to \var{file}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{void}{PyMarshal_WriteObjectToFile}{PyObject *value,
|
|
|
|
FILE *file}
|
|
|
|
Marshal a Python object, \var{value}, to \var{file}. This
|
|
|
|
will only write the least-significant 16 bits of \var{value};
|
|
|
|
regardless of the size of the native \ctype{short} type.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyMarshal_WriteObjectToString}{PyObject *value}
|
|
|
|
Return a string object containing the marshalled representation of
|
|
|
|
\var{value}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
The following functions allow marshalled values to be read back in.
|
|
|
|
|
|
|
|
XXX What about error detection? It appears that reading past the end
|
|
|
|
of the file will always result in a negative numeric value (where
|
|
|
|
that's relevant), but it's not clear that negative values won't be
|
|
|
|
handled properly when there's no error. What's the right way to tell?
|
|
|
|
Should only non-negative values be written using these routines?
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{long}{PyMarshal_ReadLongFromFile}{FILE *file}
|
|
|
|
Return a C \ctype{long} from the data stream in a \ctype{FILE*}
|
|
|
|
opened for reading. Only a 32-bit value can be read in using
|
|
|
|
this function, regardless of the native size of \ctype{long}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyMarshal_ReadShortFromFile}{FILE *file}
|
|
|
|
Return a C \ctype{short} from the data stream in a \ctype{FILE*}
|
|
|
|
opened for reading. Only a 16-bit value can be read in using
|
|
|
|
this function, regardless of the native size of \ctype{long}.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyMarshal_ReadObjectFromFile}{FILE *file}
|
|
|
|
Return a Python object from the data stream in a \ctype{FILE*}
|
|
|
|
opened for reading. On error, sets the appropriate exception
|
|
|
|
(\exception{EOFError} or \exception{TypeError}) and returns \NULL.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyMarshal_ReadLastObjectFromFile}{FILE *file}
|
|
|
|
Return a Python object from the data stream in a \ctype{FILE*}
|
|
|
|
opened for reading. Unlike
|
|
|
|
\cfunction{PyMarshal_ReadObjectFromFile()}, this function assumes
|
|
|
|
that no further objects will be read from the file, allowing it to
|
|
|
|
aggressively load file data into memory so that the de-serialization
|
|
|
|
can operate from data in memory rather than reading a byte at a time
|
|
|
|
from the file. Only use these variant if you are certain that you
|
|
|
|
won't be reading anything else from the file. On error, sets the
|
|
|
|
appropriate exception (\exception{EOFError} or
|
|
|
|
\exception{TypeError}) and returns \NULL.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{PyMarshal_ReadObjectFromString}{char *string,
|
|
|
|
int len}
|
|
|
|
Return a Python object from the data stream in a character buffer
|
|
|
|
containing \var{len} bytes pointed to by \var{string}. On error,
|
|
|
|
sets the appropriate exception (\exception{EOFError} or
|
|
|
|
\exception{TypeError}) and returns \NULL.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
|
2001-10-12 16:01:43 -03:00
|
|
|
\section{Parsing arguments and building values
|
|
|
|
\label{arg-parsing}}
|
|
|
|
|
|
|
|
These functions are useful when creating your own extensions functions
|
|
|
|
and methods. Additional information and examples are available in
|
|
|
|
\citetitle[../ext/ext.html]{Extending and Embedding the Python
|
|
|
|
Interpreter}.
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyArg_ParseTuple}{PyObject *args, char *format,
|
|
|
|
\moreargs}
|
|
|
|
Parse the parameters of a function that takes only positional
|
|
|
|
parameters into local variables. Returns true on success; on
|
|
|
|
failure, it returns false and raises the appropriate exception. See
|
|
|
|
\citetitle[../ext/parseTuple.html]{Extending and Embedding the
|
|
|
|
Python Interpreter} for more information.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyArg_ParseTupleAndKeywords}{PyObject *args,
|
|
|
|
PyObject *kw, char *format, char *keywords[],
|
|
|
|
\moreargs}
|
|
|
|
Parse the parameters of a function that takes both positional and
|
|
|
|
keyword parameters into local variables. Returns true on success;
|
|
|
|
on failure, it returns false and raises the appropriate exception.
|
|
|
|
See \citetitle[../ext/parseTupleAndKeywords.html]{Extending and
|
|
|
|
Embedding the Python Interpreter} for more information.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{int}{PyArg_Parse}{PyObject *args, char *format,
|
|
|
|
\moreargs}
|
|
|
|
Function used to deconstruct the argument lists of ``old-style''
|
|
|
|
functions --- these are functions which use the
|
|
|
|
\constant{METH_OLDARGS} parameter parsing method. This is not
|
|
|
|
recommended for use in parameter parsing in new code, and most code
|
|
|
|
in the standard interpreter has been modified to no longer use this
|
|
|
|
for that purpose. It does remain a convenient way to decompose
|
|
|
|
other tuples, however, and may continue to be used for that
|
|
|
|
purpose.
|
|
|
|
\end{cfuncdesc}
|
|
|
|
|
|
|
|
\begin{cfuncdesc}{PyObject*}{Py_BuildValue}{char *format,
|
|
|
|
\moreargs}
|
|
|
|
Create a new value based on a format string similar to those
|
|
|
|
accepted by the \cfunction{PyArg_Parse*()} family of functions and a
|
|
|
|
sequence of values. Returns the value or \NULL{} in the case of an
|
|
|
|
error; an exception will be raised if \NULL{} is returned. For more
|
|
|
|
information on the format string and additional parameters, see
|
|
|
|
\citetitle[../ext/buildValue.html]{Extending and Embedding the
|
|
|
|
Python Interpreter}.
|
|
|
|
\end{cfuncdesc}
|