вызов nodejs и python асинхронно - PullRequest
0 голосов
/ 03 марта 2020

всем,

я хочу асинхронно вызвать скрипт python в моем скрипте узла. Я использую "python -shell" для этого.

Моя проблема в том, что узел сначала выполняет собственный код, а затем скрипт python. Мне нужны данные сценария python во время выполнения.

Это означает:

let {PythonShell} = require('python-shell');
let message;

PythonShell.run('python.py',null,function(err,res){
if(err) throw err;
message =res;
console.log("1",res);
}
console.log("2",{message});

Вывод: => 2 undefined => 1 foo

Мне нужен результат, но вот так: => 1 foo => 2 foo

Можете ли вы помочь мне, написав мне маленький пример? я уже читал, что это может работать с .on и .end, но я не понимаю, как!

1 Ответ

2 голосов
/ 03 марта 2020

Причина в том, что ваш метод запуска асинхронный и основан на обратном вызове. Это означает, что он запустит метод и перейдет к следующему утверждению. В этом случае это ваша консольная выписка, печатающая 2 и сообщение. Поскольку вы устанавливаете сообщение внутри обратного вызова, оно выполняется после оператора консоли, и, следовательно, вы видите это поведение. Чтобы это исправить, вам нужно переместить ваш оператор консоли внутри обратного вызова, как это

const {PythonShell} = require("python-shell");
let message;

PythonShell.run("python.py", null, function (err, res) {
  if (err) {
    throw err;
  }
  message = res;
  console.log("1", res);
  console.log("2", {message});
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...