क्या कोई आधिकारिक POSIX, GNU, या अन्य दिशानिर्देश हैं जहां प्रगति रिपोर्ट और लॉगिंग जानकारी ("fing foo; foo done" जैसी चीजें) मुद्रित की जानी चाहिए? व्यक्तिगत रूप से, मैं उन्हें stderr पर लिखना चाहता हूं ताकि मैं stdout को रीडायरेक्ट कर सकूं और केवल प्रोग्राम का वास्तविक आउटपुट प्राप्त कर सकूं। मुझे हाल ही में बताया गया था कि यह अच्छा अभ्यास नहीं है क्योंकि प्रगति रिपोर्ट वास्तव में त्रुटियां नहीं हैं और केवल त्रुटि संदेश को stderr पर प्रिंट किया जाना चाहिए।
दोनों स्थिति समझ में आती हैं, और निश्चित रूप से आप जो भी कर रहे हैं उसके विवरण के आधार पर आप एक या दूसरे को चुन सकते हैं, लेकिन मैं यह जानना चाहूंगा कि क्या इसके लिए आमतौर पर स्वीकृत मानक है। मैं POSIX, GNU कोडिंग मानकों, या किसी भी अन्य ऐसे व्यापक रूप से स्वीकृत सर्वोत्तम प्रथाओं की सूची में कोई विशिष्ट नियम नहीं पा सका हूं।
हमारे पास कुछ समान प्रश्न हैं, लेकिन वे इस सटीक मुद्दे को संबोधित नहीं करते हैं:
शेल स्क्रिप्ट्स में stderr पर पुनर्निर्देशन का उपयोग कब करें : स्वीकार किए गए उत्तर से पता चलता है कि मैं क्या करूं, कार्यक्रम का अंतिम आउटपुट stdout पर रखें और कुछ भी stderr पर रखें। हालांकि, यह सिर्फ एक उपयोगकर्ता की राय के रूप में प्रस्तुत किया जाता है, यद्यपि तर्कों द्वारा समर्थित।
क्या उपयोग संदेश को stderr या stdout पर जाना चाहिए? : यह संदेशों की मदद के लिए विशिष्ट है लेकिन GNU कोडिंग मानक का हवाला देता है। यह एक ऐसी चीज है जिसकी मैं तलाश कर रहा हूं, केवल संदेशों की मदद के लिए ही सीमित नहीं है।
तो, क्या कोई आधिकारिक नियम हैं जहां प्रगति रिपोर्ट और अन्य सूचनात्मक संदेश (जो कि कार्यक्रम के वास्तविक आउटपुट का हिस्सा नहीं हैं) को मुद्रित किया जाना चाहिए?
stdout
वास्तव में स्पिनरों और अन्य सूचनात्मक संदेशों को प्रस्तुत करने का एक सुरक्षित और सही तरीका है, लेकिन जैसा कि कई प्रोग्रामर कहते हैं, 'मौन स्वर्ण है। सब कुछ ठीक रहा तो आउटपुट कुछ भी नहीं। ' इसलिए वास्तव में, stderr का उपयोग हमेशा किया जाता है क्योंकि अस्पष्ट परिभाषा के कारण और stdout भी पाइप अनुक्रम को तोड़ सकता है। आधिकारिक गाइड के लिए
stderr
त्रुटि संदेशों की रिपोर्ट करने के लिए उपयोग किया जाएगा , सिवाय इसके कि जब एक --verbose
झंडा का उपयोग किया जाता है, जिस बिंदु पर प्रगति रिपोर्ट भी शामिल हैं।
stdout
परिणामों के साथ मिलकर परिणाम को बेकार बनाने का एक सुरक्षित तरीका है। यदि आपको कभी किसी अन्य कार्यक्रम में परिणामों को पाइप करने की आवश्यकता होती है, तो कार्यक्रम को स्पिनरों से परिणामों को अलग करने की आवश्यकता होगी। इसके अलावा, यदि आप आउटपुट को किसी फ़ाइल में रीडायरेक्ट करते हैं तो आप स्पिनरों को नहीं देख पाएंगे। IMHO।