Вернуть функцию 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