On Mon, May 11, 2009 at 2:17 PM, Early Ehlinger wrote:
Basically, you need to create a streambuf class that calls
PySys_WriteStdout() inside your_streambuf_class::sync().
http://lists.boost.org/mailman/listinfo.cgi/boost-users
It's probably fairly straightforward to do this using Boost.Iostreams,
by creating a model of Sink:
include
#include <algorithm> // min
#include <iosfwd> // streamsize
#include // sink_tag
#include // stream
#include // 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;
int main()
{
Py_Initialize();
pysys_stdout << "Hello, Python world!\n";
}
HTH,
Christopher