Node.js:为什么从cmd / c dir产生的数据事件不会输出“逐行”?

考虑下面的这个node.js应用程序:

 var spawn = require('child_process').spawn, dir = spawn('dir', ['*.txt', '/b', '/s']); dir.stdout.on('data', function (data) { //(A) console.log('stdout: ' + data); }); 

在(A)中, on data事件等待stdout输出,我们可以想象,输出是从cmd /c dir *.txt /b /s “逐行”输出cmd /c dir *.txt /b /s

但是这并没有发生。 在datavariables中, stdout输出带有多行,并用CRLF( \r\n )分割每个文件path。 为什么这会发生?

因为这只是来自subprocess标准输出的纯数据stream。 没有关于数据是否以任何特定格式的知识,或者它是否将包含任何特定的字符。 所以数据被当作一个字节stream来处理,并且不考虑这些字节的内容或含义而以块处理。 这是系统中最常用的pipe道数据forms。 但是,请注意,有一些包装stream会缓冲原始数据stream,并为您提供一系列文本。 你会在npmjs.org上find这个模块