我正在编写一个 node.js 脚本,该脚本永久在后台运行,并不时启动文件下载。我想使用 WGET 下载文件,因为在我真正知道我在用 node.js 做什么之前,它似乎更健壮。
问题是我想查看相关下载的进度。但是我找不到通过节点启动 WGET 的方法.js以打开并显示 WGET 的新外壳窗口的方式。
Node 的 exec 和 spawn 函数在后台运行外部命令,并允许我访问输出流。但是由于我的脚本在后台运行(隐藏),因此我对输出流无能为力。
我尝试通过运行"cmd/c wget..."但这没有任何区别。
有没有办法通过node.js在新窗口中运行外部命令行进程?
你可以为此使用 node-progress 和 node 的 http 客户端(或 requesT),不需要 wget:
https://github.com/visionmedia/node-progress
例:
var ProgressBar = require('../')
, https = require('https');
var req = https.request({
host: 'download.github.com'
, port: 443
, path: '/visionmedia-node-jscoverage-0d4608a.zip'
});
req.on('response', function(res){
var len = parseInt(res.headers['content-length'], 10);
console.log();
var bar = new ProgressBar(' downloading [:bar] :percent :etas', {
complete: '='
, incomplete: ' '
, width: 20
, total: len
});
res.on('data', function(chunk){
bar.tick(chunk.length);
});
res.on('end', function(){
console.log('n');
});
});
req.end();
更新:
由于您希望在后台进程中执行此操作并侦听下载进度(在单独的进程中或您拥有的进程),因此您可以使用发布-订阅功能来实现这一点,其中之一:
- 使用消息队列,如 Redis、RabbitMQ 或 ZeroMQ
- 在已知端口/UNIX域上启动TCP服务器并侦听它
资源:
http://nodejs.org/api/net.html