【发布时间】:2012-03-20 04:06:49
【问题描述】:
我有一个 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 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);
});
【问题讨论】:
-
这是最好的方法吗?似乎
stdout.on('data')事件根据缓冲区大小触发,不一定是新行。这是真的吗?