node 进程管理 child_process [spawn,exec] | 珠峰培训node正式课 网络爬虫

run.js

var i = 0;

function set(){
    i++
    setTimeout(function(){
        console.log(i)
        if(i<5){
            set();
        }
    },1000)
}set();

child_process demo

var child_process = require('child_process');
var fs = require('fs');
// spawn 是个流对象,可以通过监听它的data事件来获取里面的控制台输出
// exec 命令执行完毕后调用回调函数 stdout 存放子进程‘执行完毕’后所有的输出内容

// 创建一个  执行命令 用 spawn
function execNodeFile(fileName){
    // spawn 第一个参数:可执行文件的名字 
    // process.execPath;当前执行文件的路径 也就是node
    var pro = child_process.spawn(process.execPath,[fileName])
    // 把子进程的标准输出注入到当前主进程的标准输出
    pro.stdout.pipe(process.stdout);
    pro.stderr.pipe(process.stderr);
    // 当子进程出错的时候
    pro.on('error',function(err){
        console.log(err);
    })
    // 当子进程结束也关闭主进程
    pro.on('close',function(){
        console.log('pro is close!')
        // process.exit();
    })
}
execNodeFile('run.js');//console.log('chil process run.js');

// 创建一个 子进程 执行命令 用 exec
function execNodeFile2(cmdorder){
    child_process.exec(cmdorder, (error, stdout, stderr) => {
      if (error) {
        throw error;
      }
      console.log(stdout);//stdout 子进程‘执行完毕’后所有的输出结果
    });
}
execNodeFile2('node run.js');//console.log('chil process run.js');

// 创建一个 下载命令
function download(url){
    var fileName = url.split('/').pop();
    // 创建一个可写流实例
    var ws = fs.createWriteStream('./temp/'+fileName);
    var curl = child_process.spawn('curl',[url]);
    curl.stdout.on('data',function(data){
        ws.write(data)
    })
    curl.stdout.on('end',function(){
        ws.end();
    })
}
download("http://xyq.cbg.163.com/cgi-bin/equipquery.py?act=overall_search_show_detail&serverid=127&ordersn=280_1502047682_282090408&equip_refer=1")

function download_1(url){//会报错
    // var fileName = url.split('/').pop();
    child_process.exec('curl '+url+' -o page2.txt',function(err,stdout,stderr){
        if(err){
            console.log(err)
            return;
        }
        console.log(stdout)
    });
}
download_1("http://xyq.cbg.163.com/cgi-bin/equipquery.py?act=overall_search_show_detail&serverid=127&ordersn=280_1502047682_282090408&equip_refer=1")

  

原文地址:https://www.cnblogs.com/liujinyu/p/7358739.html