Nodejs读取某个进程的stdout并执行操作

时间:2017-09-14 00:55:37

标签: node.js windows process stdout

我想在Windows中阅读一些带有nodejs的进程的stdout。

到目前为止我得到了这个:

我用以下方法模拟过程输出:

ping -t google.com > ping.txt

ping输出被转储到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实验。

后来我计划将这个标准输出过程输出一个websocket,但现在我已经解决了这个问题。

提前致谢!最好的问候!

编辑1: ping过程并不是我尝试阅读的真正过程。真正的过程是一个cryptocoin矿工。而且它非常耗费资源。 所以这是因为我采取了这种方式。将进程输出转储到文件中并使用其他进程读取它。 我非常乐意让nodejs管理该cryptocoin流程,因为我不知道节点是否可以处理它。

如果有更好的方法可以做到这一点,我很高兴听到它。谢谢!

1 个答案:

答案 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

中运行命令