2012-04-10 11 views
5

exe ​​चलाना चाहिए जब मैं पृष्ठ खोलता हूं। असीमित प्रक्रिया को चलाने की जरूरत है।रूबी में दो तर्कों के साथ एक एक्सई असीमित रूप से कैसे चलाएं?

क्या रूबी में दो तर्कों के साथ असीमित रूप से चलाने के लिए कोई तरीका है?

मैंने रूबी कमांड - सिस्टम(), exec() की कोशिश की है, लेकिन इसकी प्रक्रिया पूरी हो रही है। मुझे पैरामीटर के साथ exe शुरू करने की आवश्यकता है प्रक्रिया पूरी होने की प्रतीक्षा करने के लिए

कोई समस्या है जो मेरे मुद्दे के लिए समर्थन करने जा रही है?

उत्तर

7

आप Process.spawn और Process.wait2 उपयोग कर सकते हैं:

pid = Process.spawn 'your.exe', '--option' 

# Later... 
pid, status = Process.wait2 pid 

आपका कार्यक्रम दुभाषिया का एक बच्चा प्रक्रिया के रूप में क्रियान्वित की जाएगी। इसके अलावा, यह व्यवहार करेगा जैसे कि इसे कमांड लाइन से बुलाया गया था।

तुम भी Open3.popen3 उपयोग कर सकते हैं:

require 'open3' 
*streams, thread = Open3.popen3 'your.exe', '--option' 

# Later... 
streams.each &:close 
status = thread.value 

मुख्य यहाँ अंतर यह है कि आप तीन IO वस्तुओं तक पहुँच प्राप्त है। प्रक्रिया के मानक इनपुट, आउटपुट और त्रुटि धाराओं को उस क्रम में, उन्हें पुनर्निर्देशित किया जाता है।

यदि आप प्रोग्राम के आउटपुट का उपभोग करना चाहते हैं, या इसके मानक इनपुट स्ट्रीम के माध्यम से इसके साथ संवाद करना चाहते हैं तो यह बहुत अच्छा है। सामान्य रूप से टर्मिनल पर मुद्रित पाठ को आपकी स्क्रिप्ट पर उपलब्ध कराया जाएगा।

आपको एक थ्रेड भी मिलता है जो प्रोग्राम को निष्पादित करने के लिए इंतजार करेगा, जो सुविधाजनक और सहज है।

1

exec एक नई प्रक्रिया पर नियंत्रण स्विच करता है और कभी वापस नहीं आता है। system एक उपप्रजाय बनाता है और इसे खत्म करने के लिए इंतजार कर रहा है।

आप शायद fork और फिर exec पर वापस लौटने की प्रतीक्षा किए बिना एक नई प्रक्रिया बनाने के लिए क्या करना चाहते हैं। आप win32ole लाइब्रेरी का भी उपयोग कर सकते हैं जो give you more control हो सकता है।

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