我有一个PhantomJS/CasperJS脚本,我使用process.spawn()
从node.js脚本运行。由于CasperJS不支持require()
ing模块,我试图将命令从CasperJS打印到stdout
,然后使用spawn.stdout.on('data', function(data) {});
从我的node.js脚本中读取它们,以便将对象添加到redis/mongoose(复杂,是,但似乎比为此设置Web服务更为直接......)CasperJS脚本执行一系列命令并创建20个截图,这些截图需要添加到我的数据库中。解析生成的node.js子进程的输出行
但是,我无法弄清楚如何打破data
变量(Buffer
?)入行......我试着将其转换为一个字符串,然后做了更换,我试着做spawn.stdout.setEncoding('utf8');
,但似乎没有任何工作...
这是我现在所拥有的
var spawn = require('child_process').spawn;
var bin = "casperjs"
//googlelinks.js is the example given at http://casperjs.org/#quickstart
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);
});
https://gist.github.com/2131204
这是最好的方法吗?看起来'stdout.on('data')'事件根据缓冲区大小触发,不一定是新行。这是真的? – 2012-03-20 04:19:22