2011-03-08 16 views
11

मुझे लूआ में io.popen का उपयोग निष्पादन योग्य चलाने के लिए करना है जो कमांड लाइन तर्क लेता है। लुआ में खत्म होने की प्रक्रिया के लिए कैसे प्रतीक्षा करें ताकि अपेक्षित आउटपुट कैप्चर किया जा सके?io.popen - लुआ में प्रक्रिया समाप्त होने के लिए कैसे प्रतीक्षा करें?

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

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

मान लीजिए निष्पादन XYZ.exe जो कमांड लाइन तर्क /all साथ कॉल किया जाना चाहिए है।

एक बार io.popen(command) निष्पादित हो जाता है, प्रक्रिया कुछ स्ट्रिंग लौटाएगी जिन्हें मुद्रित करने की आवश्यकता है।

मेरे कोड का टुकड़ा:

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

आपका मदद की सराहना की जाएगी।

+0

मैं एक (io.popen (cmd, 'आर')) कोड किसी भी तरह यह काम नहीं कर रहा है ठीक से – Chet

+0

समारोह पर कब्जा (cmd, कच्चे) स्थानीय च = ज़ोर चल रहा है - इंतजार (10000); स्थानीय एस = जोर (च: पढ़ें ('* एक')) प्रिंट (String.Format ("स्ट्रिंग:% s", रों)) च: करीब() अगर कच्चे तो लौट रों अंत एस = स्ट्रिंग .gsub (एस, '^% s +', '') एस = string.gsub (एस, '% s + $', '') एस = string.gsub (एस, '[\ n \ r] +' , '') रिटर्न एस अंत स्थानीय कमांड = कैप्चर ("सी: \ Tester.exe/all") – Chet

उत्तर

18

यदि आप मानक लुआ का उपयोग कर रहे हैं तो आपका कोड थोड़ा अजीब दिखता है। मैं टाइमआउट या प्लेटफार्म निर्भरताओं के बारे में io.popen अर्थशास्त्र के बारे में पूरी तरह से निश्चित नहीं हूं, लेकिन कम से कम मेरी मशीन पर निम्न कार्य करता है।

local file = assert(io.popen('/bin/ls -la', 'r')) 
local output = file:read('*all') 
file:close() 
print(output) --> Prints the output of the command. 
संबंधित मुद्दे