最近在go里面用exec启动另外一个程序并获取它的stdout时出现了一个比较奇怪的问题。
stdpipe里的数据不是按行传过来,而是过了很久才会刷一大批数据出来,应该是其中存在某种缓冲机制。
跟踪了go标准库的代码没有发现会导致这种现象,查看了管道的缓冲机制好像也没问题,最后查到应该是跟该程序的缓冲io相关.
附上代码, 例子里运行的ping不会出现上面提到的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
最近在go里面用exec启动另外一个程序并获取它的stdout时出现了一个比较奇怪的问题。
stdpipe里的数据不是按行传过来,而是过了很久才会刷一大批数据出来,应该是其中存在某种缓冲机制。
跟踪了go标准库的代码没有发现会导致这种现象,查看了管道的缓冲机制好像也没问题,最后查到应该是跟该程序的缓冲io相关.
附上代码, 例子里运行的ping不会出现上面提到的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|