www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - stdout redirect

reply "Andrea Fontana" <nospam example.com> writes:
How can I redirect stdout / stderr to file (from D not shell)?
Apr 11 2012
parent reply "Andrea Fontana" <nospam example.com> writes:
On Wednesday, 11 April 2012 at 12:46:30 UTC, Andrea Fontana wrote:
 How can I redirect stdout / stderr to file (from D not shell)?
Self-reply: It works using std.c way: import std.cstream; std.c.stdio.freopen(args[4].ptr, "w+", dout.file); std.c.stdio.freopen(args[4].ptr, "w+", derr.file);
Apr 11 2012
parent reply "Stefan" <stefan schuerger.com> writes:
On Wednesday, 11 April 2012 at 13:00:45 UTC, Andrea Fontana wrote:
 On Wednesday, 11 April 2012 at 12:46:30 UTC, Andrea Fontana 
 wrote:
 How can I redirect stdout / stderr to file (from D not shell)?
Self-reply: It works using std.c way: import std.cstream; std.c.stdio.freopen(args[4].ptr, "w+", dout.file); std.c.stdio.freopen(args[4].ptr, "w+", derr.file);
Careful: D strings are not zero-terminated. args[4].toStringz() is the safer choice. Cheers, Stefan
Apr 11 2012
parent reply "Andrea Fontana" <nospam example.com> writes:
On Wednesday, 11 April 2012 at 15:25:56 UTC, Stefan wrote:
 On Wednesday, 11 April 2012 at 13:00:45 UTC, Andrea Fontana 
 wrote:
 On Wednesday, 11 April 2012 at 12:46:30 UTC, Andrea Fontana 
 wrote:
 How can I redirect stdout / stderr to file (from D not shell)?
Self-reply: It works using std.c way: import std.cstream; std.c.stdio.freopen(args[4].ptr, "w+", dout.file); std.c.stdio.freopen(args[4].ptr, "w+", derr.file);
Careful: D strings are not zero-terminated. args[4].toStringz() is the safer choice. Cheers, Stefan
Good point Stefan!
Apr 12 2012
parent reply "Philip Stuckey" <pstuc002.public gmail.com> writes:
On Thursday, 12 April 2012 at 08:11:58 UTC, Andrea Fontana wrote:
 On Wednesday, 11 April 2012 at 15:25:56 UTC, Stefan wrote:
 On Wednesday, 11 April 2012 at 13:00:45 UTC, Andrea Fontana 
 wrote:
 On Wednesday, 11 April 2012 at 12:46:30 UTC, Andrea Fontana 
 wrote:
 How can I redirect stdout / stderr to file (from D not 
 shell)?
Self-reply: It works using std.c way: import std.cstream; std.c.stdio.freopen(args[4].ptr, "w+", dout.file); std.c.stdio.freopen(args[4].ptr, "w+", derr.file);
Careful: D strings are not zero-terminated. args[4].toStringz() is the safer choice. Cheers, Stefan
Good point Stefan!
why not: import std.stdio; stdout = File(args[4], "w+"); stderr = File(args[4], "w+");
Apr 11 2015
parent reply "FreeSlave" <freeslave93 gmail.com> writes:
On Sunday, 12 April 2015 at 04:39:06 UTC, Philip Stuckey wrote:
 why not:
 import std.stdio;
 stdout = File(args[4], "w+");
 stderr = File(args[4], "w+");
It just replaces the object, not redirects output. E.g. if you use printf somewhere it will use stdout, not file.
Apr 12 2015
parent Rikki Cattermole <alphaglosined gmail.com> writes:
On 13/04/2015 1:12 a.m., FreeSlave wrote:
 On Sunday, 12 April 2015 at 04:39:06 UTC, Philip Stuckey wrote:
 why not:
 import std.stdio;
 stdout = File(args[4], "w+");
 stderr = File(args[4], "w+");
It just replaces the object, not redirects output. E.g. if you use printf somewhere it will use stdout, not file.
You will need to use writefln instead of printf. As printf uses the processes stdout. Changing this would be tricky and OS based.
Apr 12 2015