2012-11-05 8 views
28

Sto provando a generare un processo esterno phantomjs utilizzando il nodo child_process e quindi inviare le informazioni a quel processo dopo che è stato inizializzato, è possibile?Processo figlio Nodejs: scrivere su stdin da un processo già inizializzato

Ho il codice seguente:

var spawn = require('child_process').spawn, 
    child = spawn('phantomjs'); 

child.stdin.setEncoding = 'utf-8'; 
child.stdout.pipe(process.stdout); 

child.stdin.write("console.log('Hello from PhantomJS')"); 

Ma l'unica cosa che ho ottenuto sulla stdout è la richiesta iniziale per console phantomjs.

phantomjs> 

Così sembra la child.stdin.write non sta facendo alcun effetto.

Non sono sicuro di poter inviare ulteriori informazioni a phantomjs prima dello spawn iniziale.

grazie in anticipo.

risposta

56

è necessario passare anche \n simbolo per ottenere il vostro lavoro di comando:

var spawn = require('child_process').spawn, 
    child = spawn('phantomjs'); 

child.stdin.setEncoding('utf-8'); 
child.stdout.pipe(process.stdout); 

child.stdin.write("console.log('Hello from PhantomJS')\n"); 

child.stdin.end(); /// this call seems necessary, at least with plain node.js executable 
+1

eccellente Vadim! grazie mille, questo è stato il trucco – zanona

+0

sì ma perché? o forse un punto e virgola invece di un ritorno a capo, anche? –

+0

Ho aggiunto la chiamata child.stdin.end() –