- 使用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: '开始同步'
});
}