On 06/22/2014 05:01 PM, WhatMeWorry wrote:
After hours of reading (obviously not comprehending) std.process and
looking at code samples, I still can't even do something this simple.
Open a Windows command line and run miscellaneous commands. Only the
first command, dir" is shown in the final output.
auto pipe = pipeShell("dir", Redirect.all);
pipe.stdin.writeln("cd");
pipe.stdin.writeln("whomai");
Typo: whoami
pipe.stdin.flush();
pipe.stdin.close();
foreach(str; pipe.stdout.byLine)
writefln("from shell: %s",str);
I tried putting the wait() command was well in various places. to no avail.
As I understand it, the returned 'pipe' is used to communicate with the
command passed to pipeShell. Since 'dir' does not understand 'cd',
'whoami', etc. it fails for you.
I tried the following on Linux and it worked. I think you must replace
"bash" with "cmd" on Windows:
import std.stdio;
import std.process;
void main()
{
auto pipe = pipeShell("bash", Redirect.all);
pipe.stdin.writeln("dir");
pipe.stdin.writeln("cd");
pipe.stdin.writeln("whoami");
pipe.stdin.flush();
pipe.stdin.close();
foreach(str; pipe.stdout.byLine)
writefln("from shell: %s",str);
}
Ali