Process Stdout和stderr输出顺序错误-不是一个简单的缓冲案例AFAICT

Process Stdout和stderr输出顺序错误-不是一个简单的缓冲案例AFAICT,process,pipe,stdio,buffering,Process,Pipe,Stdio,Buffering,因此,我在将进程写入stdout和stderr时遇到了问题。有些stderr日志出现得太早-在应该首先出现的stdout行之前。现在这看起来像是明显的缓冲问题。然而,由于我如何重定向stdio,我认为情况不应该是这样。这正是我的情况: 我得到了启动nodejs脚本(子脚本)的python脚本(父脚本),如下所示 p1 = subprocess.Popen( args, stdout=subprocess.PIPE, cwd=working_di

因此,我在将进程写入stdout和stderr时遇到了问题。有些stderr日志出现得太早-在应该首先出现的stdout行之前。现在这看起来像是明显的缓冲问题。然而,由于我如何重定向stdio,我认为情况不应该是这样。这正是我的情况:

我得到了启动nodejs脚本(子脚本)的python脚本(父脚本),如下所示

  p1 = subprocess.Popen(
        args,
        stdout=subprocess.PIPE,
        cwd=working_dir,
        stderr=subprocess.STDOUT,
        env=env)
现在,子节点(nodejs)生成孙子节点(c++程序),如下所示:

params.stdio = [process.stdin, process.stdout, process.stderr];
var childRet = spawnSync(path, args, params);
错误顺序的日志都来自孙子C++程序,它是单线程的。现在,这个问题不可能是一个微不足道的缓冲问题,因为孙辈的stdout和stderr都直接指向孩子的stdout和stderr。现在孩子的stdout放在管道中,可以进行缓冲,但是stderr被重定向到stdout,所以它应该以正确的顺序放在同一管道中,从而以相同的缓冲区结束

现在,为什么输出以错误的顺序出现?在我不知道的进程之间是否存在缓冲;你不知道吗