redirect output from embedded C module

vincent wehren vincent at visualtrans.de
Tue Jun 15 11:45:36 EDT 2004


legba wrote:
> hi all..  I'm writing an application in python2.3 under linux debian 
> which accepts new "plug-ins" in the form of c-written python extension
> modules.
> My problem is that I'd like to catch the stdout/stderr from one of
> this modules
> and redirect it into a tkinter text widget, in real time. Let's say
> the module's
> name is plugin and that plugin.doSomething() prints out with a C
> printf()
> the string "it's a mess".
> 
> Redirecting sys.stdout before calling plugin.doSomething() doesn't
> work, I guess
> because the plugin code has a different stdout file then python. So
> the second solution is to force every plugin-writer to embed in every
> plugin the C lines:
> 
> if ((fd = open("outfile", O_WRONLY | O_CREAT | O_TRUNC, 0600)) == -1)
>    {
>       perror("open outfile");
>       exit(2);
>    }
>    dup2(fd, fileno(stdout));
> 
> and use as "outfile" the real stout. Then redirect python stdout to
> the text widget.
> But how do I access python stdout from C?

Use the API functions PySys_WriteStdout(format, ...)
and PySys_WriteStderr(format, ...)

HTH,

Vincent Wehren

> or even better how do I access the text widget directly from C?
> or, since this solution looks quite crappy, how do I do it in another
> way?
> 
> thanks to all
> legba



More information about the Python-list mailing list