I don't know if that helps the OP, but it's certainly an improvement over mine!

Thanks.

-- Early

On Wed, May 13, 2009 at 3:11 AM, Christopher Currie <christopher@currie.com> wrote:
On Mon, May 11, 2009 at 2:17 PM, Early Ehlinger <earlye@gmail.com> wrote:
> Basically, you need to create a streambuf class that calls
> PySys_WriteStdout() inside your_streambuf_class::sync().
It's probably fairly straightforward to do this using Boost.Iostreams,
by creating a model of Sink:

include <Python.h>

#include <algorithm>                       // min
#include <iosfwd>                          // streamsize
#include <boost/iostreams/categories.hpp>  // sink_tag
#include <boost/iostreams/stream.hpp>      // stream
#include <boost/format.hpp>                // format

class pysys_stdout_sink {
public:
   typedef char char_type;
   typedef boost::iostreams::sink_tag category;

   std::streamsize write( const char* s, std::streamsize n ) {
       // PySys_WriteStdout truncates to 1000 chars
       static const std::streamsize MAXSIZE = 1000;

       std::streamsize written = std::min( n, MAXSIZE );
       PySys_WriteStdout( (boost::format("%%.%1%s") %
written).str().c_str(), s );

       return written;
   }
};

boost::iostreams::stream<pysys_stdout_sink> pysys_stdout;

int main()
{
   Py_Initialize();
   pysys_stdout << "Hello, Python world!\n";
}

HTH,
Christopher
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users



--
Early Ehlinger