Как динамически внедрить внешний ввод в скрипт SlimerJS?
Мне нужна помощь с SlimerJS. В основном моя программа должна периодически получать входные данные от stdin для выполнения следующей задачи.
Следующий код хорошо работает с PhantomJS+CasperJS в случае чтения с внешнего входа, но не может сделать то же самое в SlimerJS+CasperJS.
some code ...
var nextLink = system.stdin.readLine();
some code ...
Есть мысли о том, как решить эту проблему?
1 ответ
Это просто не поддерживается, о чем свидетельствует запрос функции на GitHub и отсутствие stdin
собственность в документации.
В основном возможны два обходных пути. Оба требуют, чтобы вы написали вторую программу на выбранном вами языке (это может быть скрипт PhantomJS).
Когда вы подходите к сценарию 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);
Существует модуль веб-сервера, который вы можете использовать для отправки сообщений в SlimerJS, когда он работает как скрипт CasperJS. Вторая программа должна будет отправлять реальные запросы.