2017-07-08 2 views
0

J'ai ceci:d'un « tube nommé »/fifo avec Node.js

const p = path.resolve(projectRoot + '/NAMEDPIPEIN'); 
    const fd = fs.openSync(p, 'r+'); 

    fs.createReadStream(null, {fd}).on('data', function (d) { 
    if (String(d).trim() === '[stdin end]') { 
     return process.nextTick(cb); 
    } 
    process.argv.push(String(d).trim()); 
    }); 

je commence le processus Node.js, puis plus tard, j'écris au tube nommé. Pour une raison quelconque, aucune donnée ne semble arriver dans le rappel de données.

Je vous écris pour pipe nommé comme ceci:

mkfifo NAMEDPIPEIN 
echo "foo bar baz" > NAMEDPIPEIN 
+0

Avez-vous essayé [cette suggestion] (https://github.com/nodejs/node/issues/3628#issuecomment-152974804) pour Linux? – mscdex

+0

merci, en essayant maintenant ... se demandant si cela va fonctionner sur mac –

+1

Selon ce fil, il (le plus probable) ne fonctionnera nulle part, sauf Linux. – mscdex

Répondre

1

Cela devrait le faire:

const fs = require('fs'); 
const path = require('path'); 

const fifoPath = path.resolve(projectRoot, '/NAMEDPIPEIN') 

const fifo = fs.createReadStream(fifoPath); 

fifo.on('data', data => { 
    // process data... 
}); 

utilisation fifo.on('data', console.log) pour les tests.

+0

Je recommande également de définir l'encodage du flux de fichier avec 'fifo.setEncoding ('utf8')' – richardpringle