embedded python and interpreter threads

Charlie DeTar chazen at gmail.com
Tue Dec 7 17:52:16 CET 2004


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");



More information about the Python-list mailing list