Run Lua script from Python

前端 未结 1 1016
萌比男神i
萌比男神i 2020-12-15 13:58

Suppose I have a Lua script that contains 2 functions. I would like to call each of these functions with some arguments from a Python script.

I have seen tutorials o

1条回答
  •  暗喜
    暗喜 (楼主)
    2020-12-15 14:25

    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.

    0 讨论(0)
提交回复
热议问题