Question

I am trying to spawn an external process phantomjs using node's child_process and then send information to that process after it was initialized, is that possible?

I have the following 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')");

But the only thing I got on the stdout is the initial prompt for phantomjs console.

phantomjs> 

So it seems the child.stdin.write is not making any effect.

I am not sure I can send additional information to phantomjs ater the initial spawn.

thanks in advance.

Était-ce utile?

La solution

You need to pass also \n symbol to get your command work:

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

Autres conseils

You need to surround your write by cork and uncork, the uncork method flushes all data buffered since cork was called. child.stdin.end() will flush data too, but no more data accepted.

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

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

child.stdin.cork();
child.stdin.write("console.log('Hello from PhantomJS')\n");
child.stdin.uncork();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top