【发布时间】:2017-09-14 00:55:36
【问题描述】:
我想在 Windows 中使用 nodejs 读取某些进程的一些标准输出。
到目前为止,我得到了这个:
我用 :
模拟过程输出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 输出 stdout 进程,但现在我遇到了这个问题。
提前致谢!最好的问候!
编辑 1: ping 过程不是我要读取的真实过程。真正的过程是一个加密货币矿工。而且它非常消耗资源。 所以那是因为我采取了这种方法。将进程输出转储到文件中并使用另一个进程读取。 我不是 100% 乐意让 nodejs 管理该加密币进程,因为我不知道 node 是否可以处理它。
如果有更好的方法来做到这一点,我很高兴听到它。谢谢!
【问题讨论】:
-
ping进程无法告知您已经截断了文件,因此它将继续写入它认为应该在文件末尾的位置。你不能那样做。肯定 node.js 有一个内置的机制来管道孩子的标准输出? -
谢谢哈利,就像我在下面的评论中说的那样,真正的过程是加密货币矿工。而且资源非常昂贵。我不知道nodejs是否可以管理它。我不想依赖它。这就是让我想到这种方法的原因,将输出转储到文件并使用另一个进程读取它。你认为这是一个更好的方法吗?还是更好的语言?提前致谢!
-
为什么孩子的资源密集程度会有所不同?父进程所要做的就是处理输出,对吧?
标签: node.js windows process stdout