1

私は、バックグラウンドで永続的に実行され、時々ファイルのダウンロードを開始する node.js スクリプトを作成しています。ファイルのダウンロードには WGET を使用したいと考えています。なぜなら、node.js で何をしているのかを本当に理解するまでは、WGET の方がより堅牢に見えるからです。

問題は、問題のダウンロードの進行状況を確認したいということです。しかし、新しいシェル ウィンドウを開いて WGET 用に表示する方法で、node.js を介して WGET を開始する方法が見つかりません。

ノードの exec および spawn 関数はバックグラウンドで外部コマンドを実行し、出力ストリームにアクセスできるようにします。しかし、スクリプトはバックグラウンド (非表示) で実行されるため、出力ストリームに対してできることはあまりありません。

「cmd /c wget ...」を実行して新しいシェルウィンドウを開こうとしましたが、違いはありませんでした。

node.jsを介して新しいウィンドウで外部コマンドラインプロセスを実行する方法はありますか?

4

1 に答える 1

1

これには node-progress とノードの 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();

アップデート:

これをバックグラウンド プロセスで実行し、ダウンロードの進行状況をリッスンする必要があるため (別のプロセスまたは何を持っているか)、pub-sub 機能を使用して次のいずれかを実行できます。

  • Redis、RabbitMQ、ZeroMQ などのメッセージ キューを使用する
  • 既知のポート/UNIXドメインでTCPサーバーを起動し、それをリッスンします

資力:

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

于 2012-05-29T12:15:49.120 に答える