2009-02-16 12 views
15

मैं एक टीसीएल (उम्मीद) स्क्रिप्ट लिखना सीख रहा हूं और मुझे लगता है कि कुछ उदाहरण स्पॉन का उपयोग करने के लिए दिखाते हैं, जबकि अन्य कमांड निष्पादन दिखाते हैं। मैंने googling की कोशिश की, लेकिन यह नहीं मिल सकता कि क्या अंतर है?स्पॉन और निष्पादन के बीच क्या अंतर है?

मान लीजिए कि मैं एक लंबी उम्मीद स्क्रिप्ट के बीच में 'exec' कहता हूं, मैं क्या होने की उम्मीद कर सकता हूं?

उत्तर

15

spawnexpect कमांड tcl कमांड नहीं है। exec एक tcl कमांड है।

spawn एक प्रक्रिया बनाता है। प्रक्रियाओं के इनपुट और आउटपुट को अन्य उम्मीदों के आदेशों के उपयोग के लिए उम्मीद से जोड़ा जाता है: send, expect और interact

exec टीसीएल के तहत एक उपप्रोसेसर बनाता है। सामान्य रूप से टीसीएल को तब तक निलंबित कर दिया जाता है जब तक उपप्रोसेस पूरा नहीं हो जाता है। हालांकि, एक पृष्ठभूमि में उपप्रोसेसर बना सकता है (अंतिम तर्क के रूप में & का उपयोग करके) और यदि कोई इनपुट और आउटपुट सही तरीके से हुक करता है, तो टीसीएल उपप्रोसेस के साथ बातचीत कर सकता है। यह बहुत बेकार है और वास्तव में इस प्रकार की बातचीत है कि अपेक्षाकृत आसानी से संभालने के लिए डिज़ाइन किया गया था।

0

जहां तक ​​मुझे पता है, स्पॉन एक प्रक्रिया आईडी (और अपेक्षा के साथ लिंक) देता है, जबकि निष्पादन केवल अंतिम stdout देता है, जब तक आप "&" पास नहीं करते। तो यह आपकी अपेक्षाओं को प्रभावित नहीं करेगा।

13

प्रश्न का उत्तर देने का एक आसान तरीका यह पूछने के लिए कह रहा है कि आपको निष्पादन बनाम स्पॉन का उपयोग कब करना चाहिए। संक्षेप में, इंटरैक्टिव कमांड के लिए स्पॉन का उपयोग करें और गैर-इंटरैक्टिव कमांड के लिए निष्पादन करें।

5

यह भी ध्यान देने योग्य है कि कुछ (कई?) प्रोग्राम किसी उपयोगकर्ता द्वारा चलाए जाने पर अलग-अलग व्यवहार करते हैं (यानी, कमांड लाइन पर) एक बैच प्रक्रिया का हिस्सा बनकर/किसी अन्य प्रक्रिया से चलते हैं। वास्तविक अंतर यह है कि प्रक्रिया से जुड़ा टर्मिनल है या नहीं।

टीसीएल के एक्सपैक्ट एक्सटेंशन का हिस्सा स्पॉन कमांड चीजों को सेट करता है, इसलिए निष्पादित प्रोग्राम स्वयं को उपयोगकर्ता द्वारा चलाए जाने के रूप में देखता है, और फिर कार्यक्षमता को जोड़ता है ताकि टीसीएल प्रोग्राम बाहरी कार्यक्रम के साथ सुविधाजनक तरीके से बातचीत कर सके। (यानी, नियमित रूप से अभिव्यक्तियों और उन मैचों से शाखा के माध्यम से इसके आउटपुट से मिलान करना)। स्पॉन के माध्यम से चलने वाली चीजें असीमित रूप से चलती हैं।

निष्पादन आदेश एक कोर टीसीएल कमांड है जो दूसरे प्रोग्राम को चलाता है, जो इसके आउटपुट को वापस कर देता है। यह किसी भी जटिल सेटअप को नहीं करता है जो स्पॉन करता है, लेकिन केवल एक प्रोग्राम चलाने और इसे आउटपुट (और यह रिटर्न कोड) देखने के लिए बहुत आसान हो सकता है। निष्पादन द्वारा चलाए गए चीजें डिफ़ॉल्ट रूप से, सिंक्रनाइज़ेशन से चलती हैं, लेकिन कमांड के अंत में एक एम्पर्सेंड इसे पृष्ठभूमि में चलाने के लिए कारण बनाता है (पारंपरिक शैल स्क्रिप्टिंग की तरह)।

ओपन कमांड, आमतौर पर फ़ाइलों को पढ़ने/लिखने के लिए उपयोग किया जाता है, बाहरी प्रक्रियाओं को चलाने के लिए भी इस्तेमाल किया जा सकता है। पाइप (|) प्रतीक के साथ कमांड नाम से पहले, आप इसे बाहरी प्रक्रिया चलाने के लिए कहते हैं, और परिणामी प्रक्रिया के साथ बातचीत करने के लिए पढ़ने/लिखने के लिए फ़ाइल डिस्क्रिप्टर तक पहुंच प्राप्त करते हैं। यह उपलब्ध प्रक्रिया के साथ अधिक बातचीत के साथ, निष्पादन और स्पॉन के बीच एक मध्य ग्राउंड की तरह है, लेकिन जटिल पर्यावरणीय सेटअप के बिना जो स्पॉन करता है। यह प्रोग्राम के साथ बातचीत करने के लिए बेहद आसान हो सकता है जिसके लिए इनपुट की आवश्यकता होती है लेकिन स्वचालन के लिए अभी भी काफी अच्छी तरह से सेटअप है।

+0

ऐसे कार्यक्रम का एक उदाहरण विडंबनापूर्ण रूप से tclsh है। –

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