2011-03-08 32 views
11

Tôi phải sử dụng io.popen trong Lua để chạy tệp thi hành có tham số dòng lệnh. Làm thế nào để chờ quá trình hoàn thành trong Lua để có thể ghi lại đầu ra mong muốn?io.popen - làm thế nào để chờ quá trình kết thúc ở Lua?

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

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

Giả sử thực thi là XYZ.exe cần được gọi với đối số dòng lệnh /all.

Khi io.popen(command) được thực hiện, quá trình sẽ trả lại một số chuỗi cần được in.

đoạn mã của tôi:

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

sự giúp đỡ của bạn sẽ được đánh giá cao.

+0

Tôi gặp một mã bằng cách nào đó nó không hoạt động đúng chức năng – Chet

+0

chụp (cmd, thô) địa phương f = assert (io.popen (cmd, 'r')) - chờ (10000); local s = assert (f: read ('* a')) In (string.format ("String:% s", s)) f: close() nếu raw sau đó trả về s end s = string .gsub (s, '^% s +', '') s = string.gsub (s, '% s + $', '') s = string.gsub (s, '[\ n \ r] +' , '') trả lại s kết thúc lệnh cục bộ = capture ("C: \ Tester.exe/all") – Chet

Trả lời

18

Nếu bạn đang sử dụng Lua chuẩn, mã của bạn có vẻ hơi lạ. Tôi không hoàn toàn chắc chắn về io.popen ngữ nghĩa liên quan đến thời gian chờ hoặc phụ thuộc nền tảng, nhưng các công việc sau đây ít nhất là trên máy của tôi.

local file = assert(io.popen('/bin/ls -la', 'r')) 
local output = file:read('*all') 
file:close() 
print(output) --> Prints the output of the command. 
Các vấn đề liên quan