2009-04-28 19 views
26

पर्ल में सिस्टम और बैकटीक्स और पाइप के बीच अंतर क्या है?

system:

 system PROGRAM LIST 

में के रूप में:

system "abc"; 

बैकटिक में के रूप में:

`abc`; 

पर्ल तीन तरीके (है कि मैं के बारे में पता) बाहरी प्रोग्राम चलाने का समर्थन करता है इसे एक पाइप के माध्यम से चलाना:

open ABC, "abc|"; 

उनके बीच अंतर क्या हैं? यहां मुझे पता है कि:

  1. आप कमांड के आउटपुट को आसानी से प्राप्त करने के लिए बैकटिक्स और पाइप का उपयोग कर सकते हैं।
  2. यह है (भविष्य में संपादन में अधिक?)

उत्तर

35
  • प्रणाली है कि(): आदेश चलाता है और आदेश के बाहर निकलें स्थिति देता है
  • बैकटिक: कमांड चलाता है और रिटर्न आदेश के उत्पादन
  • पाइप: रन कमांड और आपको उन्हें हैंडल
का उपयोग करने की अनुमति देता है

बैकटीक्स निष्पादित प्रोग्राम के STDOUT को एक चर में रीडायरेक्ट करता है, और सिस्टम इसे आपके मुख्य प्रोग्राम के STDOUT पर भेजता है।

+0

पाइप बैकटिक्स का एक अधिक बढ़िया दाग नियंत्रण है। बैकटीक्स STDOUT को वापस लौटाता है, जैसा कि: $ date = 'date'। पाइप के साथ, आप तय कर सकते हैं कि आउटपुट कब और कैसे पढ़ा जाए, या प्रक्रिया में सिग्नल भेजने के लिए। –

2

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

1

प्रोग्राम की निकास स्थिति प्राप्त करना system() तक सीमित नहीं है। जब आप close(PIPE) पर कॉल करते हैं, तो यह बाहर निकलने की स्थिति देता है, और आप $? से सभी 3 विधियों के लिए नवीनतम निकास स्थिति प्राप्त कर सकते हैं।

कृपया ध्यान दें कि

readpipe('...') 

`...` 
+0

क्या आप यह वाक्य पूरा कर सकते हैं? कृपया यह भी ध्यान दें कि इसके बजाय readpipe ('...') ...। –

+0

मैंने इसे स्पष्ट करने के लिए स्वरूपण को ठीक किया। फिक्स्ड-टाइप को इंगित करने के लिए बैकटिक्स का उपयोग * वास्तविक * बैकटिक्स टाइप करना मुश्किल बनाता है ... – ephemient

+0

एक और नोट के रूप में, '...' और qx /.../ (और qx (...) और qx # ... # और कोई अन्य डिलीमीटर) समकक्ष भी हैं। – ephemient

3

perlipc प्रलेखन विभिन्न तरीकों कि आप पर्ल से अन्य प्रक्रियाओं के साथ बातचीत कर सकते हैं बताते हैं के रूप में ही है, और perlfunc's open documentation पाइप filehandles बताते हैं।

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

ऐसे मॉड्यूल भी हैं जो क्रॉस-प्लेटफार्म किनारे के मामलों के साथ इन विवरणों को संभालते हैं।

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