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.