2017-09-14 10 views
1

Windowsのnodejsでいくつかのプロセスのいくつかのstdoutを読みたいと思います。Nodejsはいくつかのプロセスのstdoutを読み込んで処理します

は、これまでのところ、私はこれを得た:

私は、プロセスの出力をシミュレートします。ping出力はping.txtファイルにダンプされ

ping -t google.com > ping.txt 

を。 そのファイルはノード内で変更が監視されます。

ので、nodejsに私はこのコードを持って:

var filename = 'ping.txt'; 

var fs = require("fs"); 

fs.watch(filename, function (event, filename) { 
    if (event == 'change') { 
     console.log('change', filename); 

     fs.stat(filename, function (err, stats) { 
      console.log('size ', stats.size); 

      if(stats.size > 500){     
       fs.truncate(filename,10,function(){ 
        console.log("truncated"); 
       }); 

      }    
     }) 
    } 
}); 

をしかし、これは私のnodejs出力されます。

size 0 
change ping.txt 
size 192 
change ping.txt 
size 253 
change ping.txt 
size 375 
change ping.txt 
size 436 
change ping.txt 
size 559 
truncated 
change ping.txt 
size 620 
truncated 
change ping.txt 
size 743 
truncated 
change ping.txt 
size 804 
truncated 
change ping.txt 
size 926 
truncated 

ファイル切り詰めれることは決してありません。

実際のプロセスでは大量の出力が得られているので、大量のファイルサイズを取得したくありません。

これは、ファイルを切り詰めようとする主な理由です。

しかし、動作していません。

誰も私に手を差し伸べることはできますか?これは私の最初のノード実験です。

後で私はこのstdoutプロセスをwebsocketに出力することを計画していますが、今ではこの問題に悩まされています。

ありがとうございます!宜しくお願いします!

編集1: pingプロセスは、私が読もうとしている実際のものではありません。実際のプロセスはcryptocoinの鉱夫です。そして、それは非常に飢えている資源です。 これは私がこのaproachをとったからです。プロセス出力をファイルにダンプし、別のプロセスで読み取る。 ノードがそれを処理できるかどうかわからないので、私は100%満足しているわけではありません。

これを行うにはもっと良い方法があれば、私は耳にはとても満足しています。ありがとう!

+0

でコマンドを実行します。ファイルを切り捨てたので、ファイルの終わりがどこにあるべきだと思うところに書き込みを続けます。あなたはそうすることはできません。もちろん、node.jsには、子の標準出力をパイプする組み込みのメカニズムがありますか? –

+0

ハリー、ありがとう、私は以下のコメントで言ったように、実際のプロセスはcryptocoinの鉱夫です。そして、非常にリソースが高価です。 nodejsがそれを管理できるかどうかは分かりません。そして、私はそれに頼りたくはありません。 これは、私がこのaproachを考え出し、出力をファイルにダンプし、別のプロセスで読むことになった理由です。それがより良い選択だと思いますか?または、使用するより良い言語ですか?前もって感謝します! – nicomonjelat

+0

なぜ、子供がどのようにリソースを大量に消費しているかに違いはありますか?すべての親プロセスは出力を処理するだけです。 –

答えて

0

私はNPMパッケージrotating-file-streamを使用して、小さなスニペットを行なったし、動作しているようです:

// stream.js 
const rfs = require('rotating-file-stream'); 

const stream = rfs('ping.txt', { 
    size: '500B', // rotate every 500 Bytes written 
}); 

const stdin = process.openStdin(); 

stdin.pipe(stream); 

は `ping`プロセスは、あなたがしたことを伝える方法がありません、端末ping google.com | node stream.js

+0

はい、私は前にこれを見ました。しかし、私が出力を読み取ろうとしている実際のプロセスは、cryptocoinの鉱夫です。 それは非常に重いプロセスです、おなかが空腹です。 そして、私はnodejsに依存してejecutionする必要はありません。 – nicomonjelat

+0

nodejsは、そのような重いプロセスを管理し、チャンピオンのように働くことができると思いますか?それとも問題があるのだろうか?事前にお礼します – nicomonjelat

+0

ここでストリームの背後にあるストリームのアイデアは、ビットごとにデータのチャンクを取得するので、プロセスはラムなどを消費しません。 理論ノードでは簡単に処理できますが、現実あなたが調べるのはあなた次第です: –

関連する問題