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