Node使用Linux wget

  • 使用child_process模块
    ps: 不知道我哪里写的有问题, 总是走stderr...
let exec = require('child_process').exec;

/**
 * @method Linux wget命令下载
 * @param url 下载地址
 * @param destPath 保存地址
 * @param socket socket通讯对象
 * @returns {Function}
 */
downloadFileByWget(url, destPath, socket) {
    destPath = path.join(__dirname, destPath);
    let shell = 'wget -P ' + destPath + ' ' + url;
    console.log('downloadFileByWget shell:' + shell);
    this.mkdir(destPath); // 创建保存地址
    let st = new Date().getTime();
    console.log('url:', url);
    console.log('destPath:', destPath);
    let wgetExec = exec(shell); // 执行命令

    // 命令执行成功的回调
    wgetExec.stdout.on('data', function (data) {
        console.log('标准输出:\n' + data);
        socket.emit('new message', {
            message: data
        });
    });

    // 命令执行有错误的回调
    wgetExec.stderr.on('data', function (data) {
        if(data.indexOf('%') !== -1 || data.indexOf('K') !== -1 || data.indexOf('s') !== -1){
            console.log('标准错误输出:\n' + data);
            socket.emit('new message', {
                message: data
            });
        }
    });

    // 命令执行完成的回调
    wgetExec.on('exit', function (code, signal) {
        let et = new Date().getTime();
        console.log('downloadFileByWget run time: ', et - st);
        console.log('子进程已退出,代码:' + code)
        socket.emit('new message', {
            message: '同步完成'
        });
    });
    socket.emit('new message', {
        message: '开始同步'
    });
}

你可能感兴趣的:(Node使用Linux wget)