2008-09-25 17 views
37

में os.execute के आउटपुट को वापस प्राप्त करें जब मैं लुआ में "os.execute" करता हूं, तो एक कंसोल जल्दी से पॉप अप हो जाता है, कमांड निष्पादित करता है, फिर बंद हो जाता है। लेकिन मानक लुआ पुस्तकालयों का उपयोग कर कंसोल आउटपुट को वापस पाने का कोई तरीका है?लुआ

+2

यह पूछने के लिए धन्यवाद, आज भी यही बात सोच रहा था –

उत्तर

22

मुझे लगता है कि आप यह http://pgl.yoyo.org/luai/i/io.popen io.popen चाहते हैं। लेकिन यह हमेशा में संकलित नहीं कर रहा है

1

मैं लुआ के बारे में विशेष रूप से पता नहीं है, लेकिन जैसा कि आप आमतौर पर एक आदेश चला सकते हैं:

comd >comd.txt 2>&1 

फ़ाइल comd.txt के उत्पादन और त्रुटि कब्जा करने के लिए है, तो का उपयोग भाषाओं फाइल मैं/हे कार्यों इसे पढ़ने के लिए।

इस तरह मैं भाषा करता हूं अगर भाषा स्वयं स्टैनर्ड आउटपुट और त्रुटि को कैप्चर करने के लिए प्रदान नहीं करती है।

+0

यह विंडोज विशिष्ट है लेकिन यह एक तरीका है जो मेरे लिए हल किया गया है। निष्पादित करने के लिए पारित पूर्ण कमांड स्ट्रिंग का एक उदाहरण "cmd.exe/c c: \ pathtoit \ someprogram.exe -arg1 somefile> c: \ temp \ out.txt 2> और 1" है। 2> भाग मेरे लिए चाल थी। – jdr5ca

+0

यह विंडोज विशिष्ट नहीं है। यह यूनिक्स, लिनक्स, बीएसडी, ओएस एक्स, और कई अन्य प्रणालियों में भी काम करेगा। मैं frivolous अस्थायी फ़ाइलों का सबसे बड़ा प्रशंसक नहीं हूँ, इसलिए मुझे यह दृष्टिकोण पसंद नहीं है, हालांकि यह तकनीकी रूप से काम करता है। '2> और 1' भाग मानक आउटपुट (आउटपुट 2) को मानक आउटपुट (आउटपुट 2) पर रीडायरेक्ट करता है, जिसे पहले ही comd.txt पर रीडायरेक्ट किया गया था ('> '' 1> '' के लिए शॉर्टेंड है) –

47

आप io.popen है, तो यह है कि मैं क्या उपयोग करते हैं:।

 
function os.capture(cmd, raw) 
    local f = assert(io.popen(cmd, 'r')) 
    local s = assert(f:read('*a')) 
    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 

आप io.popen नहीं करते हैं, तो शायद popen (3) नहीं है आपके सिस्टम पर उपलब्ध है, और आप गहरे दही में हैं। लेकिन सभी यूनिक्स/मैक/विंडोज़ लूआ पोर्ट्स में io.popen होगा।

+0

क्या आपके पास इसका उदाहरण है उपरोक्त उपयोग करने के लिए? – starbeamrainbowlabs

+1

मैंने कुछ मालिकाना यूपीएस सॉफ्टवेयर 'स्थानीय curPercent = os.capture (" sudo pwrstat -status | grep 'बैटरी क्षमता' | cut -d '' -f 3 ", झूठी) के लिए प्रतिशत शक्ति प्राप्त करने के लिए इसका उपयोग किया - सुनिश्चित करें कि आपके पास पासवर्ड के बिना इस pwrstat को चलाने के लिए/etc/sudoers में नियम है (NOPASSWD) ' मेरे पास ऊपर दिए गए os.capture फ़ंक्शन का दूसरा विकल्प 'false' पर सेट है ताकि वह सामान्य रूप से आपकी नई लाइन को निकाल दे प्राप्त। – Logg