2016-02-19 2 views
2

У меня есть выражение Lua, которое может печатать некоторую строку. Например: print(1+2). Тогда, я называю это выражение в Python 3 с помощью Lupa библиотеки:Сохранение вывода Lua в строку Python

import lupa 

lua = lupa.LuaRuntime(unpack_returned_tuples=True) 
res = lua.eval('print(1+2)') 

Конечно, res является None, потому что это выражение не возвращает ничего. Но Мне нужно поймать выход и сохранить в переменной.

Возможно ли это? Как я могу это сделать?

+0

вы пробовали [это] (HTTP: //stackoverflow.com/a/16571630/3005167)? Я не знаю, заботится ли 'lupa' о' sys.stdout', но стоит попробовать. – kazemakase

+0

@kazemakase, я только что попробовал, но это не работает для меня. Во-первых, я заменил 'cStringIO' на' io', потому что я работал над Python 3. Итак, когда я запускал следующий код: 'with Capturing() в качестве вывода: lua.eval ('print (1 + 2)') print (output) ', ** У меня есть пустой список вывода **. – VeLKerr

ответ

2

Я никогда не использовал Python, но я думаю, что вам нужно сделать, это:

import lupa 

lua = lupa.LuaRuntime(unpack_returned_tuples=True) 
res = lua.eval('1+2') 

Рез должен теперь быть 3, которую можно распечатать из Python. Если вы хотите Lua печатать вместо этого, вы должны будете использовать выполнить:

res = lua.execute('local v = 1+2 print(v) return v') 

(на основе подобных вопросов, которые имели эти примеры кода)

Смежные вопросы