如何在Process.StandardOutput中禁用输出缓冲

Dre*_*fer 8 c# winapi process expect buffering

这个问题不止一次被问过,但我在任何讨论中都没有找到满意的答案.

我正在启动一个命令行过程,它可以对STDOUT进行实时测量,大约每秒产生一个新结果.使用System.Diagnostics.Process.StandardOutput导致完全不可接受的延迟(超过20秒),因为STDOUT数据通过Process.StandardOutput StreamReader中的4k缓冲区工作,并且似乎没有任何方法可以解决这个问题.

调用Process.StandardOutput.BaseStream.Flush()不起作用.

我试过对Process.StandardOutput进行逐字节同步读取,但是我仍然比实际输出落后4k.

任何人都可以至少验证我有可能以某种方式克服我重定向STDOUT时遇到的所有缓冲问题,并且一旦它出现在shell窗口中就会立即收到我的应用程序中的数据吗?我可以继承Process类并更改StandardOutput流读取器的行为吗?我是否需要查看原始的WINAPI呼叫?

不知何故,这必须要完成,即使我最终编写非托管C++来启动任务并使用输出,并将其连接起来.任何帮助都非常感谢; 我的智慧结束了......

编辑:看来我需要的是可用于C/C++,Perl,Python和Java的"期望"库的.Net实现(这是迄今为止我发现的唯一库).有谁知道这样的野兽是否存在?

Cam*_*ird 1

“[我]有没有办法启动它,这样它就不会意识到自己正在被重定向?” 是的:这正是 Expect 的领域。据我所知,没有 .Net 实现;这当然是可行的,不过......