zoukankan      html  css  js  c++  java
  • 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")

      

  • 相关阅读:
    A20 烧录和启动 log
    图像处理---图像分割技术---基于图像灰度分布的阈值方法一
    H.265---内容总览
    H.265---仿射运动模型和双线性运动模型
    H.265---帧内预测与帧间预测
    linux内核---进程通信---消息队列
    linux内核---嵌入式linux内核的五个子系统
    高并发服务器---nginx---实现负载均衡的几种方式
    高并发服务器---nginx---正向代理和反向代理
    【CV系列】基于形态学梯度的边缘检测
  • 原文地址:https://www.cnblogs.com/liujinyu/p/7358739.html
Copyright © 2011-2022 走看看