2017-07-08 14 views
0

Ich habe dies:Lesen von einem 'Named Pipe'/Fifo mit 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()); 
    }); 

ich den Node.js Prozess zu starten, und dann später, schreibe ich an die Named Pipe. Aus irgendeinem Grund scheinen keine Daten in den On-Data-Callback einzutreffen.

ich Named Pipe wie so schreibe:

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

Haben Sie [diesen Vorschlag] (https://github.com/nodejs/node/issues/3628#issuecomment-152974804) für Linux versucht? – mscdex

+0

danke, versuche es jetzt ... frage mich, ob es auf dem Mac funktioniert –

+1

Nach diesem Thread wird es (wahrscheinlich) wird nirgendwo außer Linux funktionieren. – mscdex

Antwort

1

Dies sollte es tun:

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

Verwenden fifo.on('data', console.log) zum Testen.

+0

Ich empfehle auch die Einstellung der Datei-Stream-Codierung mit 'fifo.setEncoding ('utf8')' – richardpringle