मैं एक स्क्रिप्ट की तरह मिल गया है करने के लिए:बैश: बल exec'd प्रक्रिया unbuffered stdout
#!/bin/bash
exec /usr/bin/some_binary > /tmp/my.log 2>&1
समस्या some_binary
stdout में अपने प्रवेश के सभी भेजता है है, और बफरिंग यह बनाता है, ताकि मैं केवल देखने कुछ लाइनों के टुकड़ों में उत्पादन। कुछ परेशान होने पर यह परेशान होता है और मुझे यह देखने की ज़रूरत है कि आखिरी पंक्ति क्या कहती है।
क्या ऐसा करने से पहले stdout unbuffered बनाने का कोई तरीका है जो कुछ_बिनरी को प्रभावित करेगा ताकि इसमें अधिक उपयोगी लॉगिंग हो?
(आवरण स्क्रिप्ट केवल कार्यकारी से पहले कुछ वातावरण चर सेट कर रहा है, इसलिए पर्ल या अजगर में एक समाधान भी संभव होगा।)
डेनिस का जवाब * बिल्कुल * सही है। यहाँ पर क्यों। आउटिक्स के लिए सी स्टडीओ का उपयोग करने वाले यूनिक्स पर प्रोग्राम बफर करेंगे जब आउटपुट टर्मिनल पर नहीं जा रहा है (प्रदर्शन को बहुत बढ़ाता है) जब तक कि 'setvbuf' के साथ न कहें; शायद ही कोई उस से परेशान करता है। 'उम्मीद' प्रणाली (जिसमें से 'अनबफर' एक मामूली अनुप्रयोग है) यूनिक्स छद्म-टर्मिनल डिवाइस (ptys) के साथ काले जादू का उपयोग टर्मिनल के साथ प्रोग्राम चलाने के लिए करता है जो वास्तविक टर्मिनल नहीं है ताकि लपेटा गया प्रोग्राम बफर न हो इसका उत्पादन यह चालाक है, लेकिन चेतावनी दी जानी चाहिए: अधिकांश प्रणालियों में केवल सीमित संख्या में ptys हैं; एक स्वाभाविक रूप से unbuffered कार्यक्रम बेहतर है। –
बीटीडब्ल्यू, यह विंडोज पर इतना अच्छा काम नहीं करता है। ऐसा इसलिए है क्योंकि उस प्लेटफ़ॉर्म पर अपेक्षा टर्मिनल जादू के बजाय डिबगिंग जादू का उपयोग करती है (क्योंकि यह वह क्षेत्र है जहां विंडोज * बहुत * अलग है)। –
धन्यवाद। मैंने काले जादू पर भरोसा करने के बजाय सही चीज़ करने के लिए 'some_binary' को संशोधित करने का विकल्प चुनने का फैसला किया। 'उम्मीद' बहुत बढ़िया है, लेकिन मुझे यह नहीं चाहिए ... – bstpierre