需求背景:
在利用casperjs 在爬数据的时候需要爬多个数据,如果所有的的脚本写在一个js 里面,就不利于维护,以及后期的新功能的增加。现在就是要把一个类只做一件事情,例如 Hello.js 只负责打印 Hello。这样就会涉及到需要同时启动几个任务。例如,baidu.js 负责爬百度的数据,google.js 只负责爬谷歌的数据。现在需要用一条脚本同时启动两个文件去爬数据。
需求分析:
1.casperjs 在终端 通过 敲 casperjs xx.js 来执行的,调用了python 的环境。本质上执行了exec 的命令,如果在linux 系统上的话还需要给执行的文件加相对应的权限。
2.首先让index.js 可以直接执行 a.js
3.利用node 子线程去启动
a.js 简单写一句:
console.log('hello')
复制代码
index.js:
var exec = require('child_process').exec;
var child = exec('node ' + 'a.js', function(err, stdout, stderr) {
if (err) throw err;
console.log(stdout);
});
复制代码
b.js
console.log('I am b.js');
复制代码
同时执行 a.js 和 b.js
var exec = require('child_process').exec;
var child = exec('node ' + 'a.js', function(err, stdout, stderr) {
if (err) throw err;
console.log(stdout);
});
var child2 = exec('node ' + 'b.js', function(err, stdout, stderr) {
if (err) throw err;
console.log(stdout);
});
复制代码
4.通过shelljs 模块来执行shell 脚本 需要安装
npm install --save shelljs
复制代码
例子:
var shell = require("shelljs");
shell.exec("node a.js ");
复制代码
存在问题,解决了shell 命令调用,参数调用还欠缺
5.通过yargs 模块,可以解决处理命令行参数
var argv = require('yargs').argv;
console.log('url is ', argv.url)
复制代码
执行:
node yargs.js --url=www.baidu.com
复制代码
解决方案:
1.通过require('child_process').exec;
调用
2.通过 shelljs
模块
3.通过 yargs
模块调用
总结:
可以根据业务具体需求,来决定用哪一种解决方案,看那一个更适合自己的团队。