• 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")

      

  • 相关阅读:
    Text box to accept only number
    两个经典的Oracle触发器示例
    ELK部署
    Win10+CentOS7双系统引导修复
    自定义多选框(checkbox)和单选框(radio)css样式
    js事件
    js数组与字符串处理 slice、splice、substring、substr、push、pop、shift、reverse、sort、join、split
    css入门基础
    cocos2dx基础篇(7) 触碰事件
    cocos2dx基础篇(6) 定时器schedule/update
  • 原文地址:https://www.cnblogs.com/liujinyu/p/7358739.html
Copyright © 2020-2023  润新知