_popen alternative in D?

Steven Schveighoffer schveiguy at yahoo.com
Thu Jul 21 08:47:03 PDT 2011


On Thu, 21 Jul 2011 09:33:34 -0400, Vladimir Panteleev  
<vladimir at thecybershadow.net> wrote:

> On Thu, 21 Jul 2011 16:19:12 +0300, Maraco <darkandan at windowslive.com>  
> wrote:
>
>> Hello.
>>
>> I have a specific problem. I need to redirect console output from a
>> console program to dfl textbox but i cant find function to do it.
>> std.process.system only shows exiting code. I think
>> std.process.shell should do it but it is crashing whole program.
>>
>> If You don't know what im asking for there's code how i've done it
>> in C#:
>>
>> *CODE BEGINS
>> Process p = new Process();
>>             p.StartInfo.FileName = "shutdown";
>>             p.StartInfo.Arguments = " /?";
>>             p.StartInfo.UseShellExecute = false;
>>             p.StartInfo.RedirectStandardOutput = true;
>>             p.StartInfo.CreateNoWindow = true;
>>             p.Start();
>>
>>             string output = p.StandardOutput.ReadToEnd();
>>
>>             textBox3.Text = output;
>> *CODE ENDS
>>
>> Can you provide me an idea what im doing wrong or alternative to
>> popen in D langauge?
>>
>> Regards.
>
> This functionality is currently not implemented in D's standard library.
> Lars Kyllingstad implemented this in his version of std.process, but  
> only supporting the POSIX API.
> For Windows, you'll need to do it manually, in the same way as in C:
> http://msdn.microsoft.com/en-us/library/ms682499(v=vs.85).aspx

In fact, my windows changes are merged into Lars' branch  
(https://github.com/kyllingstad/phobos/tree/new-std-process)

*BUT*  (and this is a big but), dmc's runtime incorrectly handles pipes  
with C's stdio (i.e. FILE *).  Since everything in D right now is FILE *  
based, it means you can't use pipes at all.

However, I have submitted a patch for DMC's runtime to Walter.  Hopefully  
it will be approved in the near future, and then we can work on merging  
the new std.process into phobos.

-Steve


More information about the Digitalmars-d mailing list