2012-11-05 13 views
28

Ich versuche einen externen Prozess phantomjs mit Knoten child_process zu spawnen und dann Informationen an diesen Prozess zu senden, nachdem es initialisiert wurde, ist das möglich?Nodejs Child Process: schreibe von einem bereits initialisierten Prozess in stdin

Ich habe den folgenden Code:

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

Aber das einzige, was ich auf dem stdout bekam die anfängliche Aufforderung für PhantomJS Konsole.

phantomjs> 

So scheint es, die child.stdin.write ist keine Wirkung zu machen.

Ich bin nicht sicher, ob ich zusätzliche Informationen zu Phantomjs nach dem anfänglichen Spawn senden kann.

danke im voraus.

Antwort

56

Sie müssen auch \n Symbol passieren Ihren Befehl Arbeit zu bekommen:

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

excelent Vadim! Vielen Dank, das hat den Trick – zanona

+0

ja, aber warum? oder vielleicht ein Semikolon anstelle eines Zeilenumbaus? –

+0

Ich habe den child.stdin.end() -Aufruf –