11

这个问题以前被问过不止一次,但我在这些讨论中都没有找到满意的答案。

我正在启动一个命令行过程,该过程对 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 实现(这些是我迄今为止发现的唯一库)。有谁知道这样的野兽是否存在?

4

1 回答 1

1

“[我]有没有办法启动它,以至于它没有意识到它正在被重定向?” 是的:这正是 Expect 的领域。我知道没有 .Net 实现;这肯定是可行的,虽然......

于 2010-10-04T19:52:35.140 回答