विम में, शेल कमांड के आउटपुट को पढ़ने के लिए सबसे अच्छा (पोर्टेबल और तेज़) तरीका क्या है? यह आउटपुट बाइनरी हो सकता है और इस प्रकार नल होते हैं और (नहीं) पीछे की नई रेखा होती है जो मायने रखती है। वर्तमान समाधान मैं देखता हूं:खोल कमांड के आउटपुट को पढ़ने का सबसे अच्छा तरीका
system()
का उपयोग करें। समस्याएं: एनयूएलएल के साथ काम नहीं करती है।:read !
का उपयोग करें। समस्याएं: पीछे की नई लाइन को सहेज नहीं पाएगी, स्मार्ट डिटेक्टिंग आउटपुट प्रारूप (डॉस/यूनिक्स/मैक) होने का प्रयास करती है।- अस्थायी फ़ाइल के पुनर्निर्देशन के साथ
!
का उपयोग करें, फिर इसे पढ़ने के लिएreadfile(, "b")
का उपयोग करें। समस्याएं: एफएस के लिए दो कॉल,shellredir
विकल्प डिफ़ॉल्ट रूप से stderr को भी रीडायरेक्ट करता है और यह कम पोर्टेबल होना चाहिए ('shellredir'
यहां उल्लेख किया गया है क्योंकि यह वैध मान पर सेट होने की संभावना है)। system()
का उपयोग करें औरxxd
के माध्यम से आउटपुट फ़िल्टर करें। समस्याएं: बहुत धीमी, कम से कम पोर्टेबल (पाइप के लिए'shellredir'
के बराबर नहीं)।
कोई अन्य विचार?
आप ' = प्रणाली ('printf' '\ x00' '') ' कोशिश कर सकते हैं। यह कुछ भी आउटपुट नहीं करेगा, जबकि ':%! Printf '\ x00'' बफर में'^@ 'के रूप में एकल NULL को रखा जाएगा (बड़ी समस्या:':%! Printf' \ x00 \ r \ n'' करता है वही)। –
ZyX
समस्या यह है कि मैं दो कार्य नहीं करना चाहता: "बफर में कमांड पढ़ें", आमतौर पर "%!" और "फ़ाइल में कमांड आउटपुट डालें" द्वारा प्राप्त किया जा सकता है और मैं नहीं कह सकता कि मुझे कभी और आवश्यकता नहीं होगी। इस मामले में 'readfile() 'के लिए एनालॉग सबसे लचीला समाधान है। – ZyX
बस पर्ल/पायथन समर्थन का उपयोग करने के बारे में सोचा; स्टार्टर के लिए जवाब देखें – sehe