2012-06-15 12 views
5

मैं एक गहरे लाल रंग का रेक स्क्रिप्ट से एक निष्पादन चलाना चाहते हैं मौजूद हैं, कहते हैं कि foo.exeरूबी में एक प्रक्रिया को उत्पन्न करने, stdout पर कब्जा, stderr, हो रही स्थिति

मैं चाहता हूँ foo.exe से STDOUT और STDERR आउटपुट के लिए सीधे लिखा होना चाहिए कंसोल मैं से रेक कार्य चला रहा हूँ।

जब प्रक्रिया पूरी हो जाती है, तो मैं निकास कोड को एक चर में कैप्चर करना चाहता हूं। मुझे यह कैसे हासिल होगा?

मैं backticks के साथ खेल किया गया है, process.spawn, system लेकिन मैं सब व्यवहार मैं चाहता हूँ, केवल भागों प्राप्त नहीं कर सकते

अद्यतन: मैं Windows पर हूँ, एक मानक कमांड प्रॉम्प्ट में, नहीं Cygwin

+0

इसका कौन सा हिस्सा 'कर्नेल # सिस्टम' द्वारा कवर नहीं किया गया है? –

+0

मुझे पता है कि 'नेट-एसएसएच' शुद्ध रूबी lib जो ओपनएसएसएल के साथ काम करता है, इस तरह की कार्यक्षमता है- '' stdout, stderr, exit_code, exit_signal] 'की 'चैनल' रिटर्न सरणी की 'exec' विधि'। शायद आप इसे किसी भी तरह इस्तेमाल कर सकते हैं ... – Ribtoks

+0

शायद आपको उन सभी आदेशों के साथ अपनी समस्याओं को सूचीबद्ध करना चाहिए? –

उत्तर

8

system परीक्षण नहीं कर सकते STDOUT व्यवहार आप चाहते हो जाता है । यह शून्य निकास कोड के लिए true भी देता है जो उपयोगी हो सकता है।

$? पिछले system कॉल के बारे में जानकारी के साथ से भर जाता है, ताकि आप देख सकते हैं कि बाहर निकलने की स्थिति के लिए:

system 'foo.exe' 
$?.exitstatus 

मैं एक उदाहरण के लिए Runner.execute_command में इन बातों का एक संयोजन का उपयोग किया है।

+0

बाहर निकला मुझे एसटीडीईआरआर की आवश्यकता नहीं थी इसलिए मैं यह सत्यापित नहीं कर सकता कि यह _does_ इसे संभालता है, लेकिन यह मेरी ज़रूरतों के लिए काम करता है –

2

बैकटिक stdout स्ट्रिंग

foo.exe पता चलता है आप Windows चला रहे जिसके परिणामस्वरूप में कब्जा कर लिया हो जाएगी - आप स्थापित cygwin ऐसा कुछ है? यदि आप Unixy खोल के भीतर अपनी स्क्रिप्ट चलाने आप यह कर सकते हैं:

result = `foo.exe 2>&1` 
status = $?.exitstatus 

त्वरित Googling कहना है कि यह भी देशी खिड़कियों में काम करना चाहिए शैल, लेकिन मैं इस assupmtion

+0

+1 '2> और 1' के लिए +1, चुपके! –

संबंधित मुद्दे