2017-09-14 294 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

在这里,我们正在使用流背后的思想,它会得到大量的数据,点点滴滴,所以这个过程不会消耗你的内存或任何东西... 在理论上,节点可以轻松处理,但现实这取决于你自己: –

相关问题