Writing to stdin of a process

yazd via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Apr 26 04:58:03 PDT 2014


On Saturday, 26 April 2014 at 08:45:59 UTC, Craig Dillabaugh 
wrote:
> I want to be able to write to the stdin stream of an external 
> process using std.process.  I have the following small test app.
>
> myecho.d
> ------------------------------------------------------------------
>
> import std.stdio;
>
> void main(string[] args)
> {
>   foreach (line; stdin.byLine()) {
>         stdout.writeln(line);
>   }
> }
>
> ------------------------------------------------------------------
>
> If I call this from the command line, it echo's back whatever I 
> write
> to it.
>
> Then I have the following program.
>
> testpipes.d
> -------------------------------------------------------------------
> import std.process;
> import std.stdio;
>
> void main( string[] args ) {
>
>     auto pipes = pipeProcess("./myecho", Redirect.stdin );
>     scope(exit) wait(pipes.pid);
>
>     pipes.stdin().writeln("Hello world");
> }
> --------------------------------------------------------------------
>
> If I compile and run testpipes.d, nothing happens.  I was 
> expecting
> it to echo back "Hello world" to me.
>
> Can anyone tell me what I am dong wrong.

What you are missing is a call to flush() after writeln(). This 
is necessary for pipes as they are only automatically flushed if 
an internal buffer is full, AFAIK.


More information about the Digitalmars-d-learn mailing list