Вернуть функцию Python в консоль Chrome

Я пытаюсь вернуть функцию из Python на консоль google chrome, используя eel в Python.

Это текущий код, который у меня есть:

Python

import eel

eel.init('web')


print("Start")



@eel.expose
def my_python_function(a, b):
    print(a, b)


eel.start('index.html')

HTML

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Tutorial</title>


    <script type="text/javascript" src="/eel.js"></script>
    <script>
      console.log('Calling Python...');
      eel.my_python_function(1, 2);

    </script>




  </head>
  <body>
<p>test</p>
  </body>
</html>

В js-скрипте HTML eel.my_python_function(1,2) будет распечатываться в cmd.

Я пробовал следующее, чтобы попытаться вывести функцию Python на консоль Chrome.

Take 1

<script type="text/javascript" src="/eel.js"></script>
<script>
  console.log('Calling Python...');
  a = eel.my_python_function(1, 2);
  console.log(a);

</script>

это дало мне такой вывод в google chrome:

ƒ (callback = null) {
            if(callback != null) {
                eel._call_return_callbacks[call.call] = callback;
            } else {
                return new Promise(function(resolve) {

а это моя попытка 2

<script type="text/javascript" src="/eel.js"></script>
<script>
  console.log('Calling Python...');
  a = eel.my_python_function(1, 2);
  console.log(a());

</script>

Настроили console.log(a); в console.log(a());

Результат был promise

Реальный выход должен быть 1 2

2 ответа

Ваша функция python ничего не возвращает, попробуйте использовать

Python:

@eel.expose
def my_python_function(a, b):
    return a+ b

Js:

console.log('Calling Python...');
eel.my_python_function(1, 2)().then((r) => {
    console.log(r);
});

Я столкнулся с той же проблемой, и это единственное решение, которое я нашел

https://github.com/ChrisKnott/Eel

В Javascript язык не позволяет нам блокировать, пока мы ждем обратного вызова, за исключением использования await внутри асинхронной функции. Таким образом, эквивалентный код со стороны Javascript будет:

// Inside a function marked 'async' we can use the 'await' keyword.
async function run() {

  // The first call returns the function and the second actually execute it
  let a = await eel.my_python_function()(1,2);
  // Must prefix call with 'await', otherwise it's the same syntax

  console.log("Got this from Python: " + a);
}

run();

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

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