Thread overview
capture stdout or stderr
Feb 01, 2017
Emil
Feb 01, 2017
angel
Feb 02, 2017
Emil
Feb 02, 2017
sarn
February 01, 2017
is it possible to intercept the  STDOUT or STDERR and capture the output into a variable ?


some pseudocode to explain what I mean

string[] output_buffer;
stdout.capture_to(output_buffer);

writeln("test 1"); # not printed
writeln("test 2"); # not printed

stdout.release(output_buffer);

writeln("test 3"); # printed
writeln(output_buffer); # prints '["test 1","test 2"]'



February 01, 2017
On Wednesday, 1 February 2017 at 01:08:19 UTC, Emil wrote:
> is it possible to intercept the  STDOUT or STDERR and capture the output into a variable ?
>
>
> some pseudocode to explain what I mean
>
> string[] output_buffer;
> stdout.capture_to(output_buffer);
>
> writeln("test 1"); # not printed
> writeln("test 2"); # not printed
>
> stdout.release(output_buffer);
>
> writeln("test 3"); # printed
> writeln(output_buffer); # prints '["test 1","test 2"]'

No.
Please keep in mind, that in Linux, for example, stdout is a file ...
writeln() interacts with OS API, which, of course, has nothing to do with internal data structures of your application.
What you could probably do is replace writeln() with a custom logger. In your logger implementation you can add such functionality.



February 02, 2017
On Wednesday, 1 February 2017 at 01:08:19 UTC, Emil wrote:
> is it possible to intercept the  STDOUT or STDERR and capture the output into a variable ?
>
>
> some pseudocode to explain what I mean
>
> string[] output_buffer;
> stdout.capture_to(output_buffer);
>
> writeln("test 1"); # not printed
> writeln("test 2"); # not printed
>
> stdout.release(output_buffer);
>
> writeln("test 3"); # printed
> writeln(output_buffer); # prints '["test 1","test 2"]'

If you *had* to, you should be able to hack it by reopening the file descriptors for standard output or error (at least on *nix), but is there a specific reason you want to do this, or do you just want formatted output to a variable?
February 02, 2017
On Wednesday, 1 February 2017 at 14:38:18 UTC, angel wrote:
> On Wednesday, 1 February 2017 at 01:08:19 UTC, Emil wrote:
>> is it possible to intercept the  STDOUT or STDERR and capture the output into a variable ?
.....
>> writeln(output_buffer); # prints '["test 1","test 2"]'
>
> No.
> Please keep in mind, that in Linux, for example, stdout is a file ...
> writeln() interacts with OS API, which, of course, has nothing to do with internal data structures of your application.
> What you could probably do is replace writeln() with a custom logger. In your logger implementation you can add such functionality.

Thank you.