8

是否可以为 phantomjs 的system.stdin事件设置事件监听?

phantomjs 可以从标准输入读取但在等待输入时停止一切的示例:

var system = require('system');

system.stdout.writeLine('waiting for user input...');
var input = system.stdin.readLine();
// anything down here won't execute until input has been received

理想的解决方案就像 nodejs 的process.stdin.on()

phantomjs 似乎没有提供任何方法来做到这一点,但它仍然是可能的。

我在想我可以使用fs.open()并轮询流以进行更改,但我不知道如何为 stdio/tty 打开正确的文件,或者这是否与我正在尝试做的事情相关。

我在 Debian 6 上使用 phantomjs 版本 1.9.0

4

2 回答 2

4

我不确定这是否是正确的方法,或者即使它在性能方面很好,但是它工作正常,除了必须为程序发出第一个 STDIN 请求以便它初始化。

测试.js

console.log('initialising program, waiting for user input');

var stdin = require('fs').open('/dev/stdin', 'r');

setInterval(function () {
    var line = stdin.readLine();
    if (line) { console.log('>>', line); }
}, 100);

console.log('logic running async');

然后您可以创建一个 FIFO 管道并将其附加到进程

$ mkfifo PIPE
$ phantomjs test.js < PIPE

然后在另一个终端窗口上,您可以:

echo hello world > PIPE

输出将是:

initialising program
logic running async
>> hello world

我认为这不适用于 Windows 机器。再说一次,这在性能方面可能真的很糟糕,因为它使用定义的间隔来捕获用户的输入,但是如果我想调试一个程序,它是一种快速简便的方法,通过评估来自那里的输入。

于 2013-07-31T09:58:25.927 回答
0

根据问题,该功能目前不可用。

尽管 stdin 可能是一个更快的选择,但我还是选择了 webserver 方法。

于 2013-05-20T09:17:10.883 回答