2012-03-12 23 views
23

Czy można odczytać następujące dane ze zmiennej lokalnej w Lua?Lua os.execute wartość zwracana

local t = os.execute("echo 'test'") 
print(t) 

Chcę tylko, aby osiągnąć w ten sposób: co jest realizowane poprzez ox.execute i zwróci żadnej wartości, chciałbym użyć go w Lua - na przykład echo 'test' wyjścia woli test w wierszu poleceń bash - to możliwe uzyskać zwróconą wartość (test w tym przypadku) do lokalnej zmiennej Lua?

+9

To Lua, nie LUA. To nazwa własna, a nie akronim. –

+0

@NicolBolas Och, dziękuję, mój mistrzu! – Cyclone

+0

@NicolBolas weeeeeelll ....;) –

Odpowiedz

51

Zamiast tego można użyć io.popen(). Zwraca uchwyt pliku, którego można użyć do odczytania danych wyjściowych polecenia. Może działać coś podobnego do następującego:

local handle = io.popen(command) 
local result = handle:read("*a") 
handle:close() 

Należy pamiętać, że będzie to zawierał końcowy znak nowej linii (jeśli jest) emitowany przez to polecenie.

+0

Dziękuję :) Spróbuję. – Cyclone

+0

Otrzymuję tę wiadomość: '' popen 'not supported'. – Cyclone

+0

@Cyclone: ​​Zgodnie z instrukcją "Ta funkcja jest zależna od systemu i nie jest dostępna na wszystkich platformach". Na jakiej platformie próbujesz tego dokonać? Jedynym sposobem obejścia tego problemu jest użycie 'os.execute()', ale przekierowanie standardowego wyjścia do znanego pliku tymczasowego, a następnie późniejsze odczytanie pliku tymczasowego. –

-10

Niestety, ale jest to niemożliwe. Jeśli program echo zakończy działanie z powodzeniem, zwróci 0. Ten kod powrotu jest tym, co funkcja os.execute() również otrzymuje i zwraca.

if 0 == os.execute("echo 'test'") then 
    local t = "test" 
end 

To jest sposób na uzyskanie tego, co chcesz, mam nadzieję, że ci to pomoże.

Kolejną wskazówką dotyczącą uzyskania kodu powrotu funkcji jest odnośnik Lua. Lua-Reference/Tutorial

4
function GetFiles(mask) 
    local files = {} 
    local tmpfile = '/tmp/stmp.txt' 
    os.execute('ls -1 '..mask..' > '..tmpfile) 
    local f = io.open(tmpfile) 
    if not f then return files end 
    local k = 1 
    for line in f:lines() do 
     files[k] = line 
     k = k + 1 
    end 
    f:close() 
    return files 
end 
-4

Lua os.capture zwraca wszystkie standardowe wyjście, dlatego zostaną zwrócone do tej zmiennej.

Przykład:

local result = os.capture("echo hallo") 
print(result) 

Druk:

hallo 
+1

Nie sądzę, że ta metoda jest częścią modułu "os". http://www.lua.org/manual/5.3/manual.html#6.9 – rodvlopes

Powiązane problemy