Hello everyone,

In the meantime I managed to work out another solution, mainly thanks to reading the source code of some OSS projects. I post it here so somebody
else looking for solution to this problem had the example available:

----cut----
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
#include <syslog.h>
#include <unistd.h>

static FILE *read_module(const char *cpathname, long mtime)
{
  FILE *fp;
  long magic;
  long pyc_mtime;

  fp = fopen (cpathname, "rb");
  if (fp == NULL)
    return NULL;

  magic = PyMarshal_ReadLongFromFile (fp);
  if (magic != PyImport_GetMagicNumber())
    {
      fclose(fp);
      return NULL;
    }

  pyc_mtime = PyMarshal_ReadLongFromFile (fp);
  if (mtime && pyc_mtime != mtime)
    {
      fclose(fp);
      return NULL;
    }

  return fp;
}


int main(int argc, char **argv)
{
        int size;

        Py_Initialize();
        PyCodeObject *mainobj, *pycode;
        PyObject *result, *mainmodule, *maindict;
        mainmodule = PyImport_AddModule("__main__");
        maindict = PyModule_GetDict(mainmodule);

        FILE *f = read_module("multiply.pyc", 0L);
        pycode = (PyCodeObject *) PyMarshal_ReadObjectFromFile(f);
        printf("pointer: %d\n", pycode);

        PyEval_EvalCode(pycode, maindict, maindict);
        Py_Finalize();

}

----cut----

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to