Good point. It looks like shell throws if the return value is an error code (something other than 0 on Posix). It looks like dmd does return an error code on failed compilation, so redirecting to stdout won't work. Back to the pipes or file redirect then.
Christophe wrote: > Justin Whear , dans le message (digitalmars.D.learn:29380), a écrit : >> That'll work if you don't mind normal output being mixed with error >> messages. >> >> >> Timon Gehr wrote: >> >>> On 09/08/2011 07:26 PM, Justin Whear wrote: >>>> The Posix solution is to use pipes. Basically, you'll want the parent >>>> process to set up a pipe for stderr, fork, then the child process uses >>>> the write end of the stderr while the parent reads from the other end. >>>> Not sure what the Windoze solution is. >>>> Alternatively, the cheap and easy way is to use redirects: >>>> >>>> system("dmd bla.d 2>error.log"); >>>> >>>> If an error is thrown, read from error.log. >>> >>> I think the easiest way on a posix system is this: >>> >>> auto res=shell("dmd bla.d 2>&1"); >>> >>> I haven't tested it tough. What it should do is redirect dmd's stderr to >>> stdout, which can then be read. >> > > Well, if shell throws, it will not return, and the output will not be > assigned to res.