我正在使用C#来读取另一个程序的STDOUT。如果我这样做:
StreamReader reader = process.StandardOutput;
reader.ReadToEnd();
是否可以保证将最后一件事全部冲到程序的STDOUT?或者有点像TCP,我必须有一个消息终止符或长度标题?
答案 0 :(得分:1)
默认情况下,StandardOutput是缓冲的,这意味着您可能会从另一端(或多个整个消息)获取整个消息。但它并没有真正得到保证,特别是因为您正在阅读的过程可能已经改变了StandardOutput的缓冲。
消息终结器将是解决问题的最佳方式。虽然通常在进程通过StandardOutput进行通信时,所有内容都是基于行的,因此只需使用换行符作为消息终止符,这可能是最简单和最常见的起点。
答案 1 :(得分:0)
reader.ReadToEnd()
在进程终止之前不会返回,所以在调用之后你应该看到它写入stdout的所有内容。缓冲只会影响它从其他程序到读者缓冲区的速度,但是你的代码无法区分(至少在这个线程上),因为它仍在等待ReadToEnd()
返回。