5

I am looking for a way to call a js function from a python function. I am coming to you because I also need my js function to use DOM, so pyv8 for example is not a solution.. Do you guys have any idea? Is it even possible?

Thanks in advance.

souki
  • 1,305
  • 4
  • 23
  • 39
  • "I also need my js function to use DOM". The javascript DOM exists in the browser (unless you're emulating it). Python runs on the server. Are you asking how you can trigger execution of browser-side javascript from python code? – Levi Aug 23 '16 at 09:15
  • Yes that's it. Kode.Error404's solution seems fine. – souki Aug 23 '16 at 09:17
  • Possible duplicate of [Call Javascript function from Python](https://stackoverflow.com/questions/8284765/call-javascript-function-from-python) – Stevoisiak Oct 17 '17 at 15:10

3 Answers3

6

According to https://stackoverflow.com/a/30537286/6353933,

import js2py

js = """
function escramble_758(){
var a,b,c
a='+1 '
b='84-'
a+='425-'
b+='7450'
c='9'
document.write(a+c+b)
}
escramble_758()
""".replace("document.write", "return ")

result = js2py.eval_js(js)  # executing JavaScript and converting the result to python string 

Advantages of Js2Py include portability and extremely easy integration with python (since basically JavaScript is being translated to python).

To install:

pip install js2py
Community
  • 1
  • 1
Kode.Error404
  • 573
  • 5
  • 24
6

PyExecJS seems to be a good option.

>>> import execjs
>>> execjs.eval("'red yellow blue'.split(' ')")
['red', 'yellow', 'blue']
>>> ctx = execjs.compile("""
...     function add(x, y) {
...         return x + y;
...     }
... """)
>>> ctx.call("add", 1, 2)
3

to install:

$ pip install PyExecJS
SuperNova
  • 25,512
  • 7
  • 93
  • 64
3

PythonMonkey can be used to execute JavaScript and WebAssembly in Python.

import pythonmonkey as pm

pm.eval("""
function add(x, y) {
    return x + y;
}
""")

js_adder = pm.eval('add')

print(js_adder(1,2)) # outputs 3.0

pm.eval('console.log("Hello from JavaScript");') # outputs: Hello from JavaScript

Installation:

$ pip install pythonmonkey
Will Pringle
  • 121
  • 2