node.js - Nodejs 读取某些进程的标准输出并执行操作

标签 node.js windows process stdout

我想在Windows中使用nodejs读取某些进程的标准输出。

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

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

ping -t google.com > ping.txt

ping 输出转储到 ping.txt 文件中。 在 Node 中监视该文件的更改。

所以,在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 是否可以处理它。

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

最佳答案

我使用 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

关于node.js - Nodejs 读取某些进程的标准输出并执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46208901/

相关文章:

node.js - 我应该在 node.js 中 fork() 多少子进程?

javascript - Axios - 未捕获( promise )错误 : Request failed with status code 500

node.js - mongodb更新查询结果添加参数

c - 使用 libcurl C/C++ 下载时卡住

java - Process.waitFor()、线程和 InputStreams

node.js - 无法通过浏览器访问 mongodb - 看起来您正试图在 native 驱动程序端口上通过 HTTP 访问 MongoDB

c++ - 创建进程和0xc0000142错误

Windows 服务应用程序上的 Java5 - 获取 Full Thread Dump 需要说明

c# - ProcessStartInfo - 在控制台窗口中打印输出并打印到文件 (C#)

Bash - 如何杀死符合条件的当前用户的所有进程?