[C++-sig] How to capture stdout/stderr?
Peter
python at cityofdreams.com
Sun Aug 29 14:21:07 CEST 2004
Thanks Bert, that put on hopefully the right track to do the same thing
in C++. I can almost do it completely, and I'll detail the code in
another email.
Thanks,
Peter
>
> Here is my, considerably low-tech, code :
>
> At init time,
>
> -----------
> const std::string CatchOutput =
> "class StdoutCatcher:\n"
> "\tdef __init__(self):\n"
> "\t\tself.data = ''\n"
> "\tdef write(self, stuff):\n"
> "\t\tself.data = self.data + stuff\n"
> "\n"
> "import sys\n"
> "TheStdoutCatcher = StdoutCatcher()\n"
> "sys.stdout = TheStdoutCatcher\n";
>
> Run (CatchOutput); // thin wrapper to run a snippet
> -----------
>
> and then after some python code has run :
>
> -----------
> using namespace boost::python;
> object Catcher (main_namespace ["TheStdoutCatcher"]);
> object CatcherData (borrowed (PyObject_GetAttrString (Catcher.ptr (),
> "data")));
>
> const std::string &S = extract<std::string>(CatcherData);
> Output += S; // some log string
> Run ("sys.stdout.data=''\n");
> -----------
>
> Note I'm pretty new at this, so the only warranty is
> "the above didn't crash so far" :) Now that I paste
> it, I'm not sure about that const ref to the result of
> extract.
>
>
> hth,
> bert
>
> _______________________________________________
> C++-sig mailing list
> C++-sig at python.org
> http://mail.python.org/mailman/listinfo/c++-sig
>
>
More information about the Cplusplus-sig
mailing list