如果多个进程同时写入标准输出,则没有什么可以阻止流交错。这就是我所说的碰撞。
根据node source中的评论,应该可以避免 process.stdout 中的冲突。我尝试过这个,它有帮助,但我仍然遇到碰撞。如果没有 writing
标志,我每次都会发生冲突,使用标志时它会下降到大约 40%。仍然非常重要。
page.on('onConsoleMessage', function log(message) {
var writing = process.stdout._writableState.writing
|| process.stdout._writableState.bufferProcessing
|| process.stdout.bufferSize ;
if(writing)
process.nextTick(message => log(message));
else
process.stdout.write('-> ' + message + '\n')
});
避免 process.stdout 发生冲突的最佳方法是什么?
上面的例程正在与 Winston 竞争对于标准输出
。
Node v5.12.0 Windows 10
此问题仅在使用 webstorm 中的运行控制台时发生,在 powershell 或 cmd 中运行 Node 时输出不会混淆。我提出了ticket为此,jetbrains 提供了此服务。
最佳答案
如果您有多个写入者到同一个流,我认为您不会出现交错。即使单个写入器连续记录多行,这些行也将以正确的顺序进行缓冲(如果正在缓冲),并且当另一个写入器记录其行时,它们将被附加到缓冲区,位于先前记录的行后面。
当写入者写入不同的流时,可能会发生交错,例如一个写入到 stdout
,另一个写入到 stderr
。在某一时刻,当一个流的输出缓冲区填满时,它会刷新到控制台,而不管是否有任何其他流也可能写入控制台。
关于node.js - Node 上的标准输出冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512022/