2017-09-14 3 views
1

Je veux lire quelques stdout de certains processus avec nodejs, dans Windows.Nodejs lit stdout de certains processus et fait des choses

Jusqu'à présent, j'ai obtenu ceci:

Je simulent la sortie de processus avec:

ping -t google.com > ping.txt 

La sortie ping est déversée dans le fichier ping.txt. Ce fichier est surveillé dans le nœud pour les modifications.

Ainsi, nodejs je suis arrivé ce code:

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"); 
       }); 

      }    
     }) 
    } 
}); 

Mais ceci est ma sortie 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 

Le fichier est tronqué jamais.

Je ne veux pas obtenir une taille de fichier massive, car le processus réel génère beaucoup de sortie. C'est donc la principale raison pour essayer de tronquer le fichier.

Mais ça ne marche pas.

Quelqu'un peut-il me donner un coup de main? C'est ma première expérience nodejs. Plus tard, je prévois de sortir ce processus stdout trought un websocket, mais maintenant je suis coincé avec ce problème.

Merci d'avance! Meilleures salutations!

Edit 1: Le processus ping n'est pas le vrai que je suis en train de lire. Le vrai processus est un mineur de cryptocoin. Et c'est très gourmand en ressources. Donc c'est parce que j'ai pris cette approche. Pour vider la sortie du processus dans un fichier et le lire avec un autre processus. Je ne suis pas 100% heureux que nodejs gère ce processus de cryptocoin, parce que je ne sais pas si node peut le gérer.

S'il y a une meilleure façon de le faire, je suis très heureux de l'entendre. Merci!

+0

Le processus 'ping' n'a aucun moyen de dire que vous avez tronqué le fichier, de sorte qu'il continuera à écrire à l'endroit où il pense que la fin du fichier devrait être. Vous ne pouvez pas le faire de cette façon. Sûrement node.js a un mécanisme intégré pour canaliser la sortie standard d'un enfant? –

+0

Merci Harry, comme je l'ai dit dans le commentaire ci-dessous, le vrai processus est un mineur de cryptocoin. Et est très coûteux en ressources. Je ne sais pas si nodejs peut le gérer. Et je ne veux pas en dépendre. C'est la raison pour laquelle j'ai pris cette idée, de jeter la sortie dans un fichier et de la lire avec un autre processus. Pensez-vous que c'est une meilleure approche? Ou un meilleur langage à utiliser? Merci d'avance! – nicomonjelat

+0

Pourquoi est-ce que cela fait une différence à quel point l'enfant consomme beaucoup de ressources? Tout le processus parent doit faire est de traiter la sortie, non? –

Répondre

0

J'ai fait un petit extrait en utilisant un paquet de NPM rotating-file-stream et il semble fonctionner:

// 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); 

Exécutez la commande dans le terminal ping google.com | node stream.js

+0

Oui, j'ai regardé cette approche avant.Mais le vrai processus que j'essaye de lire la sortie est un mineur de cryptocoin. Donc, c'est un processus très lourd, vram faim. Et je ne veux pas avoir à dépendre de nodejs pour son éjection. – nicomonjelat

+0

Pensez-vous que nodejs peut gérer un processus lourd comme ça et travailler comme un champion? Ou je vais avoir des problèmes? Merci d'avance – nicomonjelat

+0

Ici, nous utilisons des flux l'idée derrière les flux qu'il va obtenir morceau de données, petit à petit, de sorte que le processus ne consommera pas votre RAM ou quoi que ce soit ... En théorie, le noeud peut gérer cela facilement mais la réalité c'est à vous de découvrir: –