D-ers,

I am attempting to use pipeProcess for interacting with an external process. My simplified routine can work somewhat. But, trying to print any messages
that process writes to stderr yields the message:

(master) gnuplot > gnuplot_example
**core.exception.InvalidMemoryOperationError@src/core/exception.d(647): Invalid 
memory operation**

----------------

Simplified code:


        import std.stdio;
        import std.process;

        class Gnuplot {
           ProcessPipes pipe;

           void cmd(string txt){
              pipe.stdin.writeln(txt);
              pipe.stdin.flush();
           }

           this(){
this.pipe = pipeProcess("/usr/local/bin/gnuplot", Redirect.stdin |
              Redirect.stdout | Redirect.stderr);
           }

           ~this(){
              pipe.stdin.close();
              pipe.stdout.flush();
              pipe.stderr.flush();

foreach( line ; pipe.stdout.byLine ) writeln("stdout: ", line); foreach( line ; pipe.stderr.byLine ) writeln("stderr: ", line);
           }
        }

        void main(){

           auto gp = new Gnuplot();
           gp.cmd("plot sin(x)");
           gp.cmd("pause 2");
gp.cmd("plot line contains error ... should create output to stderr");
           gp.cmd("quit");
        }


Also, I have found a few examples on similar programs (for example in Adam Ruppe's D-Cookbook - page 107), which provide some very good information and examples.
But, I do not understand what I am seeing in my program example.

**Any pointers are gratefully received. ... especially tutorials or example code**

Best Regards,
James

PS You may note that I do not have the line "scope (exit) wait pipe.pid". Two reasons for this are: I do not understand what this is supposed to do,
and attempts to add this froze my program.

PPS I have seen some of Steven Schveighoffers helpful descriptions about piped processes and child process hanging with excessive outputs ... this should not be the case here ... only a handful of bytes might possibly be written.


Reply via email to