Как динамически внедрить внешний ввод в скрипт SlimerJS?

Мне нужна помощь с SlimerJS. В основном моя программа должна периодически получать входные данные от stdin для выполнения следующей задачи.

Следующий код хорошо работает с PhantomJS+CasperJS в случае чтения с внешнего входа, но не может сделать то же самое в SlimerJS+CasperJS.

some code ...

var nextLink = system.stdin.readLine();

some code ...

Есть мысли о том, как решить эту проблему?

1 ответ

Это просто не поддерживается, о чем свидетельствует запрос функции на GitHub и отсутствие stdin собственность в документации.

В основном возможны два обходных пути. Оба требуют, чтобы вы написали вторую программу на выбранном вами языке (это может быть скрипт PhantomJS).

  1. Когда вы подходите к сценарию CasperJS, где необходимо получить ввод, вы читаете заранее определенный файл несколько раз, пока что-то не окажется внутри него. Таким образом, вы выполняете вторую программу, когда видите, что CasperJS находится в этой точке. Программа может быть простой командой вроде

    echo my text > predefinedFile.txt
    

    или что-то более сложное. Функции опроса в CasperJS будут выглядеть примерно так:

    function poll(){
        var content = fs.read(predefinedFile).trim();
        if (!content) {
            this.wait(1000, poll);
        } else {
            // do something sensible
        }
    }
    //....
    casper.then(poll);
    
  2. Существует модуль веб-сервера, который вы можете использовать для отправки сообщений в SlimerJS, когда он работает как скрипт CasperJS. Вторая программа должна будет отправлять реальные запросы.

Другие вопросы по тегам