On Wednesday, 25 February 2015 at 19:09:16 UTC, Ali Çehreli wrote:
On 02/25/2015 05:56 AM, wobbles wrote:> Hi, > Any reason why the following wont work? > > void main(string[] args) > { > auto pidIn = File.tmpfile(); > auto pidOut = File.tmpfile(); > auto pid = spawnProcess(["ls", "./"], pidIn, pidOut, > std.stdio.stdout, null, Config.newEnv); > > if(wait(pid) == 0) > writefln("%s", pidOut.readln()); > } > > The pidOut.readln() throws this exception: > object.Exception@/usr/include/dmd/phobos/std/stdio.d(1377): Attempt to > read from an unopened file. > > I figured tmpfile() would be open for read/write by default? > Also, theres no way to pass in args to File.tmpfile() to make them > read/write. > > Any ideas?It looks like the file is closed when spawnProcess is finished. I don't know whether it is done by spawnProcess explicitly or whether it is a behavior for temporary files.How about using a pipe? The following works: import std.stdio; import std.process; void main(string[] args) { auto pidIn = File.tmpfile(); auto pidOut = pipe(); auto pid = spawnProcess(["ls", "./" ], pidIn, pidOut.writeEnd,std.stdio.stdout, null, Config.newEnv);if(wait(pid) == 0) writeln(pidOut.readEnd.byLine); } Ali
This works, Thanks folks!
