2011-03-08 8 views
11

Muszę użyć io.popen w Lua, aby uruchomić plik wykonywalny, który przyjmuje argument wiersza poleceń. Jak czekać na zakończenie procesu w Lua, aby możliwe było wychwycenie oczekiwanych wyników?io.popen - jak czekać na zakończenie procesu w Lua?

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

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

Załóżmy, że wykonywalny jest XYZ.exe która musi być wywoływana z wiersza poleceń argumentu /all.

Po wykonaniu polecenia io.popen(command), proces zwróci ciąg znaków, który należy wydrukować.

Moje urywek kodu:

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") 

Twoja pomoc będzie mile widziane.

+0

Mam kod jakoś nie działa prawidłowo – Chet

+0

wychwytywania funkcji (CMD, surowe) lokalną f = assert (io.popen (CMD, 'r')) - czekać (10000); local s = assert (f: read ('* a')) Drukuj (string.format ("String:% s", s)) f: close() jeśli raw następnie zwraca s koniec s = string .gsub (s, '^% s +', '') s = string.gsub (s, '% s + $', '') s = string.gsub (s, '[\ n \ r] +' , '') powrót s koniec lokalne polecenie = przechwytywanie ("C: \ Tester.exe/wszystkie") – Chet

Odpowiedz

18

Jeśli używasz standardowej lua, twój kod wygląda trochę dziwnie. Nie jestem całkowicie pewny co do semantyki czasu lub zależności między platformami, ale następujące czynności przynajmniej na moim komputerze.

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