如果多个进程同时写入stdout,则没有任何东西可以阻止流进行交错。这就是我所说的碰撞。
根据{{3}}中的评论,应该可以避免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
上的冲突的最佳方法是什么?
上述例程正在与stdout
竞争<IfModule mod_rewrite.c>
Options +FollowSymLinks +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ /index.php?p=$1 [L]
</IfModule>
。
节点v5.12.0 Windows 10
只有在webstorm中使用Run控制台时才会出现此问题,在powershell或cmd中运行节点时输出不会混淆。我在jetbrains为此提出了node source。
答案 0 :(得分:3)
如果您有多个写入者到同一个流,我认为您不会进行交错。即使一个编写器连续记录多行,这些行也将以正确的顺序进行缓冲(如果正在进行缓冲),当另一个编写器记录其行时,它们将被附加到缓冲区,后面是先前的记录的行。
当作者写入不同的流时,会发生交错 ,例如写入stdout
而另一个写入stderr
。在某些时候,当一个流的输出缓冲区填满时,它会被刷新到控制台,而不管其他任何可能也写入控制台的流。