【发布时间】:2016-08-27 18:04:08
【问题描述】:
似乎足够大的标准输出输出节点不会触发data 事件:
示例 bash 脚本:
#!/usr/bin/env sh
for i in {1..100000}; do
echo $i
done
从 bash 运行上述脚本应该打印从 1 到 100k 的所有数字,每行一个数字
但是当通过节点的exec代理它时:
#!/usr/bin/env node --harmony --harmony_destructuring --harmony_default_parameters
const {exec} = require('child_process');
let stdout = '';
const child = exec('./tmp.sh');
child.stdout.on('data', data => {
stdout += data;
});
child.stdout.on('close', code => {
if (code) process.exit(code);
console.log(stdout.split('\n').slice(0, 3).join('\n'));
console.log('...');
console.log(stdout.split('\n').slice(-3).join('\n'));
});
对于上述脚本,我希望得到:
1
2
3
...
99998
99999
100000
但是当运行它返回:
1
2
3
...
35984
35985
大约三分之一的输出被截断。在 data 处理程序中记录表明只有 1 个数据事件被 1 个块触发
我尝试过收听child.on('exit') 事件,但结果相同(也是stdout.on('exit'))
将exec 替换为spawn 时效果相同
node --version # v5.4.1
osx 10.10
【问题讨论】:
标签: javascript node.js