node.js:在新窗口中运行外部命令



我正在编写一个 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

相关内容

  • 没有找到相关文章

最新更新