2012-09-27 40 views
7

झील इस दो पंक्तियों पर एक नज़रtcl कार्यकारी stdout जरूरत पर पुनः निर्देशित परिणाम भी

मामले 1

set cvsUpdStr [exec cvs -qn upd] 

मामले 2

set cvsUpdStr [exec cvs -qn upd >&@stdout] 

पहले के लिए संग्रहीत करने के लिए केस cvsUpdStr कमांड का आउटपुट है, लेकिन कमांड निष्पादन के दौरान मुद्रित कुछ भी नहीं है। दूसरे मामले के लिए cvs upd स्क्रीन पर कमांड आउटपुट मुद्रित किया गया है, लेकिन cvsUpdStr खाली है। उन्हें कैसे गठबंधन करें ताकि यह cvs upd के परिणाम को प्रिंट करेगा और उसी आउटपुट को cvsUpdStr चर में संग्रहीत करेगा?

+0

आप विशेष रूप से सीवीएस बातों में रुचि रखते हैं, आप tkcvs पर एक नज़र डाल सकते हैं, क्योंकि यह पहले से ही अधिकांश सीवीएस कमांड को टीसीएल के साथ लपेटता है। http://tksvn.tigris.org/source/browse/tksvn/trunk/tkcvs/ – schlenk

उत्तर

4

दो संभावनाएं हैं। या तो इसे एक पाइपलाइन के रूप में चलाएं (open |... के साथ बनाया गया) और संदेश को संभालकर उन्हें प्रिंट करके इन्हें संभाल लें, या यूनिक्स tee उपयोगिता का उपयोग करें। दूसरा विकल्प निश्चित रूप से सरल है!

# I like to spell out “update” in full 
set cvsUpdStr [exec cvs -qn update | tee /dev/tty] 

tee कार्यक्रम अपनी सामान्य मानक आउटपुट प्लस नामक फ़ाइल करने के लिए अपने मानक इनपुट भेजता है; हम वर्तमान टर्मिनल पर भेजने के लिए /dev/tty का उपयोग करते हैं।

ध्यान दें कि इसके आउटपुट को बफर करने के कारण cvs के आउटपुट में आपको लंबी देरी हो सकती है। गैर-टर्मिनल पर आउटपुट भेजते समय यह सी लाइब्रेरी के I/O हैंडलिंग का डिफ़ॉल्ट व्यवहार है, और यदि आपको तुरंत आउटपुट की आवश्यकता हो तो समस्या हो सकती है। यह काफी शामिल हो जाता है फिक्सिंग इसलिए यदि आप उत्पादन बर्स्ती जा रहा है के साथ खुश हैं, बस इसे अकेला छोड़ दो ...


विंडोज पर, आप इसे दूसरी तरह करने की जरूरत है (आप की अपेक्षा का उपयोग कर अंत)।

set pipe [open |[list cvs -qn update] "r"] 
while {[gets $pipe line] >= 0} { 
    append cvsUpdStr "$line\n" ;# Note the \n at the end! 
    puts $line 
} 
close $pipe      ;# Any errors turn up here! 

|[list ...] साथ निर्माण नहीं बल्कि Tcl मामले में असामान्य है, लेकिन यह इस स्थिति में उपयोग करने के लिए सही से एक है। (यदि open को "फ़ाइल नाम" का पहला वर्ण कोई | है, बाकी तर्क के एक पाइप लाइन के निर्माण के लिए उपयोग करने के लिए तर्कों की सूची के रूप में व्यवहार किया जाता है।)

+0

मैं विधवाओं पर हूं, टीई के बारे में मुझे पता था, लेकिन यह यहां मदद नहीं करता है :( – Narek

+0

'ओपन |' के साथ समाधान क्या है। .' – Narek

+0

@Narek अद्यतन संस्करण का प्रयास करें। –