You can use a subprocess
to run your Lua script and provide the function with it's arguments.
import subprocess
result = subprocess.check_output(['lua', '-l', 'demo', '-e', 'test("a", "b")'])
print(result)
result = subprocess.check_output(['lua', '-l', 'demo', '-e', 'test2("a")'])
print(result)
- the
-l
requires the given library (your script)
- the
-e
is the code that should be executed on start (your function)
The value of result will be the value of STDOUT
, so just write your return value to it and you can simply read it in your Python script. The demo Lua script I used for the example simply prints the arguments:
function test (a, b)
print(a .. ', ' .. b)
end
function test2(a)
print(a)
end
In this example both files have to be in the same folder and the lua
executable must be on your PATH
.
An other solution where only one Lua VM is spawned is using pexpect
and run the VM in interactive mode.
import pexpect
child = pexpect.spawn('lua -i -l demo')
child.readline()
child.sendline('test("a", "b")')
child.readline()
print(child.readline())
child.sendline('test2("c")')
child.readline()
print(child.readline())
child.close()
So you can use sendline(...)
to send a command to the interpreter and readline()
to read the output. The first child.readline()
after the sendline()
reads the line where the command will be print to STDOUT
.