1

我正在编写一个在后台永久运行并不时启动文件下载的 node.js 脚本。我想使用 WGET 来下载文件,因为在我真正知道我在用 node.js 做什么之前它看起来更健壮。

问题是我想查看相关下载的进度。但是我找不到通过 node.js 启动 WGET 的方法,即打开一个新的 shell 窗口并为 WGET 显示。

Node 的 exec 和 spawn 函数在后台运行外部命令,让我可以访问输出流。但是由于我的脚本在后台运行(隐藏),所以我对输出流无能为力。

我尝试通过运行“cmd /c wget...”打开一个新的 shell 窗口,但这没有任何区别。

有没有办法通过 node.js 在新窗口中运行外部命令行进程?

4

1 回答 1

1

您可以为此使用 node-progress 和 Node 的 http 客户端(或 requestT),不需要 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();

更新:

由于您想在后台进程中执行此操作并监听下载进度(在单独的进程中或您有什么),您可以使用 pub-sub 功能来实现,或者:

  • 使用 Redis、RabbitMQ 或 ZeroMQ 等消息队列
  • 在已知端口/UNIX 域上启动 TCP 服务器并监听它

资源:

http://nodejs.org/api/net.html

于 2012-05-29T12:15:49.120 回答