Node.js:为什么来自cmd / c dir spawn的数据事件不会逐行输出?

时间:2013-07-22 14:00:52

标签: node.js

考虑下面这个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的'逐行'。

但它不会发生。在data变量中,stdout输出带有多行,并处理每个文件路径,我们必须按CRLF(\r\n)拆分。为什么会这样呢?

1 个答案:

答案 0 :(得分:2)

因为这只是来自子进程标准输出的纯数据流。不知道该数据是否是任何特定格式,或者它是否包含任何特定字符。因此,数据被视为字节流并以块的形式处理,而不考虑这些字节的内容或含义。这是系统周围最常见的管道数据形式。但请注意,有一些包装器流将缓冲原始数据流并为您提供一系列文本。 You will find many modules for this on npmjs.org