Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
April 11, 2012 stdout redirect | ||||
---|---|---|---|---|
| ||||
How can I redirect stdout / stderr to file (from D not shell)? |
April 11, 2012 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | 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); |
April 11, 2012 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | 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
|
April 12, 2012 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan | 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!
|
April 12, 2015 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrea Fontana | 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+");
|
April 12, 2015 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philip Stuckey | 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.
|
April 13, 2015 Re: stdout redirect | ||||
---|---|---|---|---|
| ||||
Posted in reply to FreeSlave | 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.
|
Copyright © 1999-2021 by the D Language Foundation