Woohoo, fixed my problem. It had to do with the way I was handling the methods which overwrote stderr and stdout. Yeehaw!

=Charlie


Charlie DeTar wrote:
Quick correction, sorry - the command should read like this (I had omitted the "log" before 'CaptureStdout' and 'CaptureStderr'). Same problems exist.

     PyRun_SimpleString(
         "import log\n"
         "import sys\n"
         "class StdoutCatcher:\n"
         "\tdef write(self, str):\n"
         "\t\tlog.CaptureStdout(str)\n"
         "class StderrCatcher:\n"
         "\tdef write(self, str):\n"
         "\t\tlog.CaptureStderr(str)\n"
         "sys.stdout = StdoutCatcher()\n"
         "sys.stderr = StderrCatcher()\n");

=Charlie

Charlie DeTar wrote:

So, I have an amazing, functioning foobar class that embeds python. Only trouble is, I want to be able to have multiple foobar objects at once, each with their own interpreters, stdouts, and stderrs.

My initialization of the python interpreter in the class "x" is as follows:
[snip]
if (!Py_IsInitialized()) {
PyEval_InitThreads();
Py_Initialize();
} // Start and switch to a new interpreter thread.
x->thread = Py_NewInterpreter();


    // initialize the module 'logMethods', defined elsewhere,
    // which contains my stdout and stderr definitions
    Py_InitModule("log", logMethods);
        // overwrite Python's stdout and stderr
    PyRun_SimpleString(
        "import log\n"
        "import sys\n"
        "class StdoutCatcher:\n"
        "\tdef write(self, str):\n"
        "\t\t.CaptureStdout(str)\n"
        "class StderrCatcher:\n"
        "\tdef write(self, str):\n"
        "\t\t.CaptureStderr(str)\n"
        "sys.stdout = StdoutCatcher()\n"
        "sys.stderr = StderrCatcher()\n");
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to