2017-09-14 149 views
1

我想在Windows中讀取一些使用nodejs進程的stdout。Nodejs讀取某些進程的stdout並執行某些操作

到目前爲止,我得到這個:

我模擬輸出的過程與:

ping -t google.com > ping.txt 

的平輸出在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 

文件永遠不會被截斷。

我不想獲得巨大的文件大小,因爲真實的過程獲得了大量的輸出。

所以這是試圖讓文件被截斷的主要原因。

但它不工作。

任何人都可以幫我一把嗎?這是我的第一個nodejs實驗。

後來我打算輸出stdout進程發生websocket,但現在我被這個問題困住了。

在此先感謝!最好的祝福!

編輯1: ping的過程是不是我想要讀的真正的。真正的過程是一個加密礦工。而且它非常耗資源。這是因爲我接受了這個問題。將過程輸出轉儲到一個文件中,並用另一個過程讀取它。 我不是100%樂意讓nodej管理這個cryptocoin進程,因爲我不知道node是否可以處理它。

如果有更好的方法來做到這一點,我很高興聽到它。謝謝!

+0

的'ping'進程的命令有沒有告訴你已經的方式截斷該文件,所以它會繼續寫入它認爲該文件應該結束的位置。你不能那樣做。當然,node.js有一個內置的管理孩子標準輸出的機制? –

+0

感謝哈利,就像我在下面的評論中所說的那樣,真正的過程是一個加密金礦礦工。而且資源非常昂貴。我不知道nodejs是否可以管理它。我不想依賴它。 這就是讓我去思考這個問題,將輸出轉儲到一個文件並用另一個進程讀取它的原因。你認爲這是一個更好的方法嗎?或者使用更好的語言?提前致謝! – 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 google.com | node stream.js

+0

是的,我看過這個問題之前。但我試圖讀取輸出的真實過程是一個加密金礦礦工。 所以這是一個非常繁重的過程,飢餓的vram。 而且我不想依賴nodejs來實現它。 – nicomonjelat

+0

你認爲nodejs可以管理像這樣一個繁重的過程,像冠軍一樣工作嗎?或者我會遇到問題?在此先感謝 – nicomonjelat

+0

在這裏,我們正在使用流背後的思想,它會得到大量的數據,點點滴滴,所以這個過程不會消耗你的內存或任何東西... 在理論上,節點可以輕鬆處理,但現實這取決於你自己: –

相關問題