<HTML>
<HEAD>
<TITLE>Re: [Rcpp-devel] rout and rerr instead of cout and cerr in Rcpp </TITLE>
</HEAD>
<BODY>
<FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>Just to follow up myself, it turns out that it’s easy to redirect cerr and cout to files, and that solves all my issues.<BR>
In case anyone is interested, here is how I did it:<BR>
<BR>
<BR>
#include<ostream><BR>
#include<fstream><BR>
<BR>
RcppExport SEXP myfunction(SEXP params)<BR>
{<BR>
try<BR>
{ // or use BEGIN_RCPP macro <BR>
<BR>
//start off by redirecting<BR>
streambuf* save_sbuf_fout;<BR>
streambuf* save_sbuf_ferr;<BR>
streambuf* save_sbuf_cout;<BR>
streambuf* save_sbuf_cerr;<BR>
ofstream fout;<BR>
ofstream ferr;<BR>
fout.open("cout.txt"); <BR>
ferr.open("cerr.txt");<BR>
save_sbuf_cout = cout.rdbuf();<BR>
save_sbuf_cerr = cerr.rdbuf();<BR>
save_sbuf_fout = fout.rdbuf();<BR>
save_sbuf_ferr = ferr.rdbuf();<BR>
cout.rdbuf(save_sbuf_fout);<BR>
cerr.rdbuf(save_sbuf_ferr);<BR>
<BR>
/*do whatever I normally do and write to cerr and/or cout all I want*/<BR>
<BR>
//revert to original state<BR>
cout.rdbuf(save_sbuf_cout);<BR>
cerr.rdbuf(save_sbuf_cerr);<BR>
fout.close();<BR>
ferr.close();<BR>
<BR>
}<BR>
}<BR>
<BR>
<BR>
<BR>
On 4/27/11 9:26 PM, "Sean Robert McGuffee" <<a href="sean.mcguffee@gmail.com">sean.mcguffee@gmail.com</a>> wrote:<BR>
<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'> >On 11/10/2009 12:23 PM, Dirk Eddelbuettel wrote:<BR>
</SPAN></FONT><BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'>><BR>
><I> On 10 November 2009 at 09:47, Romain François wrote:<BR>
</I>><I> | Hi,<BR>
</I>><I> |<BR>
</I>><I> | Would it make sense to have an rout and rerr so that we could do :<BR>
</I>><I> |<BR>
</I>><I> | rout<< "bla bla"<< endl ;<BR>
</I>><I> |<BR>
</I>><I> | and<BR>
</I>><I> |<BR>
</I>><I> | rerr<< "bla bla"<< endl ;<BR>
</I>><I> |<BR>
</I>><I> | and this would go into Rprintf and REprintf ? or maybe we can directly<BR>
</I>><I> | redefine cout and cerr<BR>
</I>><BR>
><I> Hm. That never really arose in my use. cout was mostly for debugging.<BR>
</I>><BR>
><I> I think a C++-ish way is to create<< operators (that eg RcppDate and<BR>
</I>><I> RcppDatetime have).<BR>
</I>><BR>
><I> Where you thinking of something other than debugging help?<BR>
</I><BR>
|Not really, but just sort of making sure debugging is consistent with <BR>
|the recommendation from WRE of using Rprintf instead of printf<BR>
</SPAN></FONT></BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
Has anyone followed up on this? I’m wondering if there might be a simple way to redirect cerr and cout to something like an rerr and rout? I for one have thousands of lines of code that use cerr and cout in libraries that I would like to use in R. It seems that they currently are causing a crash at run-time when I leave those lines in my packages. I won’t know for sure until I take the time to remove all of them, but who knows how long that might take. I think it would probably be faster and easier for me to redirect these streams to R somehow. Has that been worked out yet? If so, how? If not, I think maybe I can redirect them to some log files or something. Has anyone done that?<BR>
Thanks,<BR>
Sean<BR>
</SPAN></FONT></BLOCKQUOTE><FONT FACE="Calibri, Verdana, Helvetica, Arial"><SPAN STYLE='font-size:11pt'><BR>
</SPAN></FONT>
</BODY>
</HTML>