65

我正在尝试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')");

但我在标准输出上得到的唯一东西是 phantomjs 控制台的初始提示。

phantomjs> 

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

我不确定我是否可以在初始生成时向 phantomjs 发送其他信息。

提前致谢。

4

2 回答 2

116

您还需要传递\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
于 2012-11-05T11:17:44.050 回答
0

您需要将您write的 bycork和包围起来uncork,该uncork方法会刷新自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();
于 2021-07-13T03:35:33.927 回答