<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 12, 2014 at 3:41 PM, Vladimir Panteleev via Digitalmars-d <span dir="ltr"><<a href="mailto:digitalmars-d@puremagic.com" target="_blank">digitalmars-d@puremagic.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div class="">On Tuesday, 12 August 2014 at 07:53:44 UTC, Timothee Cour via Digitalmars-d wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
int systemNew(in char[] args){<br>
auto pipes = pipeShell(args, cast(Redirect)0);<br>
return wait(pipes.pid);<br>
}<br>
</blockquote>
<br></div>
Why use pipeShell instead of spawnShell?</blockquote><div><br></div><div>spawnShell works too.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
And why `cast(Redirect)0`? It's not necessary. </blockquote><div><br></div><div>it is, otherwise it defaults to Redirect.all which has different semantics than 'system' (so it's not a replacement of it). </div>
<div>Btw, I don't like the cast either; shouldn't there be a 'none=0' value in the enum?</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Also note that shell commands (incl. system) take one string argument, not an array.<br></blockquote><div><br></div><div>Please re-read my post carefully. pipeShell indeed takes 'in char[] command', not string (char array, not string array nor string).</div>
<div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
This can be a simpler one-liner: wait(executeShell(cmd))<br></blockquote><div><br></div><div>Please re-read my original post more carefully. This is not what 'system' does. system doesn't redirect stdin/stdout. executeShell on the other hand does this: "The functions capture what the child process prints to both its standard output and standard error streams, and return this together with its exit code". </div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
So, the deprecation message is not far off, perhaps missing a `.wait()`.<br></blockquote><div><br></div><div>The deprecation message is indeed wrong. It should be wait(spawnShell(cmd)) instead of executeShell(cmd). Different function and missing wait.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Indeed, system [..] doesn't wait until completion, unlike executeShell.<br>
</blockquote>
<br>
You mean it does wait until completion?<br></blockquote><div><br></div><div>Bad wording; what I meant is we have to wait until completion to get any stdout output with executeShell (it returns it) whereas for system/systemNew/wait(spawnShell) the output is displayed in realtime via stdout.</div>
<div><br></div></div><br></div></div>