gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:47:33 25 4
gpt4 key购买 nike

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

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

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

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

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

不知何故,这必须完成,即使我最终编写非托管 C++ 来启动任务并使用输出,并将其链接进来。非常感谢任何帮助;我已经无计可施了...

编辑:看来我需要的是可用于 C/C++、Perl、Python 和 Java 的“expect”库的 .Net 实现(这些是我迄今为止找到的唯一库)。有谁知道这样的野兽是否存在?

最佳答案

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com