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
。
但是这并没有发生。 在data
variables中, stdout
输出带有多行,并用CRLF( \r\n
)分割每个文件path。 为什么这会发生?
因为这只是来自subprocess标准输出的纯数据stream。 没有关于数据是否以任何特定格式的知识,或者它是否将包含任何特定的字符。 所以数据被当作一个字节stream来处理,并且不考虑这些字节的内容或含义而以块处理。 这是系统中最常用的pipe道数据forms。 但是,请注意,有一些包装stream会缓冲原始数据stream,并为您提供一系列文本。 你会在npmjs.org上find这个模块