Nodejs Child Process:从已经初始化的进程写入stdin

时间:2012-11-05 10:39:14

标签: node.js stdin phantomjs external-process child-process

我正在尝试使用节点phantomjs生成外部进程child_process,然后在初始化后将信息发送到该进程,这可能吗?

我有以下代码:

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

但我在stdout上唯一得到的是phantomjs控制台的初始提示。

phantomjs> 

所以似乎child.stdin.write没有任何效果。

我不确定我是否可以在初始产卵时向phantomjs发送更多信息。

提前感谢。

2 个答案:

答案 0 :(得分:76)

您还需要传递\n符号才能使命令正常工作:

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 :(得分:0)

您需要用 writecork 包围 uncorkuncork 方法会刷新自调用 cork 后缓冲的所有数据。 child.stdin.end() 也会刷新数据,但不再接受数据。

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();