2012-03-12 41 views
23

Aşağıdakileri Lua'daki yerel değişkenten okumak mümkün mü?Lua os.execute dönüş değeri

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

Sadece bunu başarmak istiyorum: ox.execute aracılığıyla yürütülür ve herhangi bir değer dönecektir ne olursa olsun, Lua kullanmak istiyorum - bash komut satırında örnek echo 'test' irade çıkışı test için - mümkün olmasıdır döndürülen değer (bu durumda test) Lua yerel değişkenine nasıl alınır?

+9

O Lua, değil LUA bu. Bu uygun bir isim, bir kısaltma değil. –

+0

@NicolBolas Oh, teşekkürler efendim! – Cyclone

+0

@NicolBolas weeeeeelll ....;) –

cevap

51

Bunun yerine io.popen() kullanabilirsiniz. Bu, komutun çıktısını okumak için kullanabileceğiniz bir dosya tanıtıcısı döndürür. aşağıdaki gibi bir şey çalışabilir: Bu (varsa) o komut yaydığı sondaki yeni satır içereceğini

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

Not.

+0

Teşekkür ederim :) Ben bir deneyeceğim. – Cyclone

+0

Bu mesajı alma: '' popen 'desteklenmez'. – Cyclone

+0

@Cyclone: ​​Kılavuza göre, "Bu işlev sisteme bağlıdır ve tüm platformlarda mevcut değildir". Bunu hangi platformda deniyorsunuz? Kullanılabilir işlevleri göz önünde bulundurarak düşünebildiğim tek çözüm 'os.execute()' işlevini kullanmak, ancak standart çıktıyı bilinen bir geçici dosyaya yönlendirmek ve sonra geçici dosyayı daha sonra okumaktır. –

-10

Üzgünüz, ama bu imkansız. Yankı programlaması başarı ile çıkarsa, 0 değerini döndürür. Bu dönüş kodu os.execute() işlevinin alındığı ve döndüğü şeydir.

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

İstediğinizi elde etmenin bir yolu budur, umarım size yardımcı olur. Bir fonksiyonun dönüş kodunu almak için başka bir İpucu Lua referansıdır. 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 en os.capture döner tüm standart çıktı, böylece bu değişkene iade edilecektir.

Örnek:

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

Baskı:

hallo 
+1

Bu yöntemin os sisteminin bir parçası olduğunu sanmıyorum. http://www.lua.org/manual/5.3/manual.html#6.9 – rodvlopes