这个问题已经被问过不止一次了,但是在所有这些讨论中我都没有找到令人满意的答案。

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

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

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

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

即使我最终写了非托管的C++来启动任务并使用输出并将其链接在一起,也还是必须做到这一点。我机智的尽头...

编辑:看来,我需要的是.net实现的“期望”库,可用于C/C++,Perl,Python和Java(到目前为止,我才发现它们)。有人知道这种野兽是否存在吗?

最佳答案

“[是否]有一种方法可以启动它,使它不意识到它正在被重定向?”是的:这正是Expect的领域。我知道没有.Net实现;这当然是可行的,但是...

关于c# - 如何在Process.StandardOutput中禁用输出缓冲,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3844267/

10-12 12:24
查看更多