最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

逐行解析生成的node.js子进程的输出

IT培训 admin 5浏览 0评论

逐行解析生成的node.js子进程的输出

我有一个PhantomJS / CasperJS脚本,我正在使用process.spawn()从node.js脚本中运行。由于CasperJS不支持require() ing模块,因此我尝试将命令从CasperJS打印到stdout,然后使用spawn.stdout.on('data', function(data) {});从我的node.js脚本中读取它们,以进行将对象添加到Redis的操作。 / mongoose(令人费解,是的,但是比为此设置Web服务要简单得多。)CasperJS脚本执行一系列命令并创建例如20个屏幕快照,需要将其添加到我的数据库中。

但是,我不知道如何将data变量(Buffer?)分成多行...我尝试将其转换为字符串,然后进行替换, spawn.stdout.setEncoding('utf8');,但似乎无济于事...

这里是我现在所拥有的

var spawn = require('child_process').spawn;

var bin = "casperjs"
//googlelinks.js is the example given at 
var args = ['scripts/googlelinks.js'];
var cspr = spawn(bin, args);

//cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function (data) {
    var buff = new Buffer(data);
    console.log("foo: " + buff.toString('utf8'));
});

cspr.stderr.on('data', function (data) {
    data += '';
    console.log(data.replace("\n", "\nstderr: "));
});

cspr.on('exit', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

回答如下:

尝试一下:

cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function(data) {
  var str = data.toString(), lines = str.split(/(\r?\n)/g);
  for (var i=0; i<lines.length; i++) {
    // Process the line, noting it might be incomplete.
  }
});

请注意,“数据”事件不一定在输出的两行之间平均中断,因此一行可能跨越多个数据事件。

逐行解析生成的node.js子进程的输出

我有一个PhantomJS / CasperJS脚本,我正在使用process.spawn()从node.js脚本中运行。由于CasperJS不支持require() ing模块,因此我尝试将命令从CasperJS打印到stdout,然后使用spawn.stdout.on('data', function(data) {});从我的node.js脚本中读取它们,以进行将对象添加到Redis的操作。 / mongoose(令人费解,是的,但是比为此设置Web服务要简单得多。)CasperJS脚本执行一系列命令并创建例如20个屏幕快照,需要将其添加到我的数据库中。

但是,我不知道如何将data变量(Buffer?)分成多行...我尝试将其转换为字符串,然后进行替换, spawn.stdout.setEncoding('utf8');,但似乎无济于事...

这里是我现在所拥有的

var spawn = require('child_process').spawn;

var bin = "casperjs"
//googlelinks.js is the example given at 
var args = ['scripts/googlelinks.js'];
var cspr = spawn(bin, args);

//cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function (data) {
    var buff = new Buffer(data);
    console.log("foo: " + buff.toString('utf8'));
});

cspr.stderr.on('data', function (data) {
    data += '';
    console.log(data.replace("\n", "\nstderr: "));
});

cspr.on('exit', function (code) {
    console.log('child process exited with code ' + code);
    process.exit(code);
});

回答如下:

尝试一下:

cspr.stdout.setEncoding('utf8');
cspr.stdout.on('data', function(data) {
  var str = data.toString(), lines = str.split(/(\r?\n)/g);
  for (var i=0; i<lines.length; i++) {
    // Process the line, noting it might be incomplete.
  }
});

请注意,“数据”事件不一定在输出的两行之间平均中断,因此一行可能跨越多个数据事件。

发布评论

评论列表 (0)

  1. 暂无评论