Взаимодействовать со скриптом Python внутри приложения nodejs во время выполнения

Здравствуйте, я пытаюсь взаимодействовать со скриптом Python внутри приложения nodejs во время выполнения.

Сценарий python - это скорее командный центр для выполнения операций WhatsApp, называемых yowsup. https://github.com/tgalal/yowsup/tree/master

Я могу запустить "клиент Yowsup Cli" в оболочке и работать с ним. Но я хочу запустить его в приложении nodejs, потому что оно написано на python, а я плохо разбираюсь в python.

Поэтому я создал команду, которую я обычно использую в оболочке, следующим образом:

var spawn = require('child_process').spawn,
    ls    = spawn('./yowsup/yowsup-cli', ['demos','--login', '49XXXXXXXXXXX:8bF0hUewVcX1hf6adpuasonFdEP=', '--yowsup', '-E', 's40']);

ls.stdout.on('data', function (data) {
    console.log('stdout: ' + data.toString());
});

ls.stderr.on('data', function (data) {
    console.log('stderr: ' + data.toString());
});

ls.on('exit', function (code) {
    console.log('child process exited with code ' + code.toString());
});

Проблема в том, что я не получаю никаких данных от процесса. Скрипт python обычно печатает некоторые выходные данные как начало, но я не могу получить что-либо внутри узла во время работы процесса.

Я заглянул внутрь скрипта Python и увидел, что вывод генерируется так:

print("%s send '%s'" % (messageProtocolEntity.getFrom(False), messageProtocolEntity.getBody()))

Как я могу получить некоторые данные из скрипта Python во время выполнения?

1 ответ

Решение

Это немного отличается от вашего подхода и использует библиотеку npm, но работает (results это выход из random_geo.py скрипт):

var py = require('python-shell');
var pyOptions = {
  mode: 'text',
  pythonPath: '/opt/local/bin/python',
  scriptPath: '.'
};

function getCoords(req, res, next) {
  py.run('random_geo.py', pyOptions, function(err, results) {
    if (err) {
      console.log(err);
    } else {
      console.log(results);
    }
  });
}
Другие вопросы по тегам