如何实时获取子进程的标准输出?

问题描述

我想实时捕获子任务的标准输出,我的子任务是由 popen 创建的。但是我发现我的代码有很大的延迟。 下面是我的例子:

// works.
app.use((err: any,req:express.Request,res: express.Response,next: express.NextFunction) => {
    // SOMETHING
});

我尝试过 setvbuf 但没有运气。如果我删除“sleep 1”,那么输出很快。必须有其他地方在做缓冲。如何让它工作?

解决方法

弹出后,你可以这样做:

if (fcntl(fileno(out),F_SETFL,O_NONBLOCK) < 0)
        exit(1);
,

我现在知道为什么了。我必须在子进程中调用 setvbuf,而不是父进程。