2011-03-08 17 views
11

Bir komut satırı argümanı alan bir yürütülebilir dosyayı çalıştırmak için Lua'da io.popen kullanmam gerekiyor. Lua'da bir işlemin tamamlanması beklenir, böylece beklenen çıktı yakalanabilir mi? io.popen - Lua'da işlemin tamamlanması nasıl beklenir?

local command = "C:\Program Files\XYZ.exe /all" 

    hOutput = io.popen(command) 
    print(string.format(""%s", hOutput)) 

yürütülebilir komut satırı argümanı /all ile adı gereken XYZ.exe olduğunu varsayalım. Bir kez çalıştırıldığında, işlem yazdırılması gereken bazı dizeleri döndürecektir.

Benim kod parçacığı:

function capture(cmd, raw) 
    local f = assert(io.popen(cmd, 'r')) 
    -- wait(10000); 
    local s = assert(f:read('*a')) 
    Print(string.format("String: %s",s)) 
    f:close() 
    if raw then return s end 
    s = string.gsub(s, '^%s+', '') 
    s = string.gsub(s, '%s+$', '') 
    s = string.gsub(s, '[\n\r]+', ' ') 
    return s 
end 
local command = capture("C:\Tester.exe /all") 

Yardımına takdir edilecektir.

+0

I (io.popen (cmd, 'r')) nedense düzgün – Chet

+0

fonksiyon yakalama çalışmayan bir kod (cmd, çiğ) yerel f = assert yaşıyorum - bekle (10000); local s = assert (f: oku ('* a')) Yazdır (string.format ("Dize:% s", s)) f: close() işlenmemişse, sonuçta s = string .gsub (s, '^% s +', '') s = string.gsub (s, '% s + $', '') s = string.gsub (s, '[\ n \ r] +' , '') return s end local command = capture ("C: \ Tester.exe/all") – Chet

cevap

18

Standart Lua kullanıyorsanız kodunuz biraz garip görünüyor. Zaman aşımları veya platform bağımlılıkları ile ilgili io.popen semantiği hakkında tam olarak emin değilim, ancak aşağıdakiler en azından makinemde çalışıyor.

local file = assert(io.popen('/bin/ls -la', 'r')) 
local output = file:read('*all') 
file:close() 
print(output) --> Prints the output of the command. 
İlgili konular