我想在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过程是不是我想要读的真正的。 真正的过程是一个encryption矿工。 这是非常资源饥饿。 所以那是因为我接受了这个问题。 将进程输出转储到一个文件中,并用另一个进程读取它。 我并不乐意让nodejspipe理这个cryptocoin进程,因为我不知道node是否可以处理它。
如果有更好的办法做到这一点,我很高兴听到它。 谢谢!
我做了一个使用npm包旋转文件流的小片段,它似乎工作:
// 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);
在terminal ping google.com | node stream.js
运行命令 ping google.com | node stream.js