在C#中,可以运行一个进程并使用它的stdin和stdout与它进行交互。
然而,交互式程序有时会阻止等待输入。流未关闭,并且在调用ReadLine
方法时,该方法将阻塞,直到有更多数据可用。
他们是否可以验证stdin上是否还有数据可用而没有阻塞(如果没有更多数据可用,程序必须提供进程的stdin)...
代码示例:
this.process = new Process ();
this.process.StartInfo.FileName = "foo";
this.process.StartInfo.Arguments = "--nowarnings -i";
this.process.StartInfo.UseShellExecute = false;
this.process.StartInfo.RedirectStandardInput = true;
this.process.StartInfo.RedirectStandardOutput = true;
this.process.StartInfo.RedirectStandardError = true;
this.process.StartInfo.CreateNoWindow = true;
this.process.Start ();
this.stdin = this.process.StandardInput;
this.stdout = this.process.StandardOutput;
this.stdin.WriteLine ("command1");
while (!stdout.EndOfStream) {
Console.WriteLine (stdout.ReadLine ());
}
this.stdin.WriteLine ("command2");
答案 0 :(得分:2)
您可以使用Console.KeyAvailable
属性检查输入流中是否有可用的符号。但是,您应该将Console.ReadKey
方法与KeyAvailable
结合使用,因为ReadLine
将阻止,直到stdin
收到换行序列或文件结尾。