2009-09-16 19 views
21

मैं एक ऐसी स्क्रिप्ट बना रहा हूं जो डेटा के पूर्वनिर्धारित सेट को संभालता है, जो फ़ाइल में आउटपुट करता है। मैं एक चेतावनी पॉप अप करना चाहता हूं जब एक डेटाम (जो कि प्रत्येक सेट में हमेशा "नियमित" होता है) अलग-अलग बताता है कि यह मान अनचाहे है (क्योंकि मुझे नहीं पता कि यह डेटा को कैसे प्रभावित करता है)। क्या मुझे इस चेतावनी को stderr या stdout पर आउटपुट करना चाहिए?क्या मुझे STDERR या STDOUT को चेतावनियां आउटपुट करनी चाहिए?

उत्तर

27

अगर मैंने इस स्क्रिप्ट के आउटपुट को बचाया है (यानी केवल स्टडआउट) ताकि मैं इसे बाद में संसाधित कर सकूं, क्या यह चेतावनी आउटपुट को कैसे पार्स किया जा सकता है? इसके अलावा, अगर आउटपुट को दूसरी प्रक्रिया में पाइप किया जाता है, तो चेतावनी टर्मिनल पर दिखाई देनी चाहिए, इसलिए उपयोगकर्ता इसे तुरंत देखता है।

उन कारणों से, सामान्य रूप से, आप stderr को चेतावनी आउटपुट करते हैं।

1

असली सवाल यह है कि: यदि कोई व्यक्ति आपकी स्क्रिप्ट के आउटपुट को फ़ाइल में रीडायरेक्ट करना चाहता था, तो क्या आप फ़ाइल में चेतावनी डालेंगे, या उपयोगकर्ता को निर्देशित करेंगे?

यदि आप चेतावनी के परिणामस्वरूप उपयोगकर्ता को कुछ कार्रवाई करने की उम्मीद कर रहे हैं, तो इसे STDERR पर जाना चाहिए। अगर कुछ डाउनस्ट्रीम स्क्रिप्ट को चेतावनी से फिसलने की संभावना है, तो इसे एसटीडीईआरआर में जाना चाहिए।

+0

तो इसे बिना किसी मामले में जाना चाहिए? या क्या आपने एसटीडीईआरआर के दो संदर्भों में से एक को STDOUT होने का इरादा किया था? –

+0

मेरा मतलब एसटीडीईआरआर दोनों पर था। वे दो मामले हैं जहां आपको इसे stderr को भेजने के लिए काफी कुछ है। एकमात्र बार मैं इसे स्टडआउट पर जाने के बारे में सोचने के बारे में सोच सकता हूं, यदि स्क्रिप्ट का आउटपुट मानव उपभोग के लिए है (हो सकता है कि आप आउटपुट को किसी को देखने के लिए ईमेल करने जा रहे हों), और हो सकता है कि आप चेतावनियों का पालन करना चाहें stderr पुनर्निर्देशित करने के लिए याद किए बिना आउटपुट। – Martin

4

चेतावनी stderr पर जाना चाहिए।

दूसरों द्वारा प्रस्तुत अंकों के अलावा (डाउनस्ट्रीम प्रक्रियाओं के लिए त्रुटियों को पार्स करने और कंसोल पर उपयोगकर्ता से त्रुटि छिपाने के कारण), लचीलापन का एक मुद्दा है।

यदि उपयोगकर्ता stderr से चेतावनी नहीं चाहता है कि डाउनस्ट्रीम प्रक्रिया पर जाएं जो stdout को पार्स कर रहा है, तो उन्हें कुछ विशेष करने की ज़रूरत नहीं है।

your_script | downstream_process 

उपयोगकर्ता stderr से चेतावनी एक नीचे की प्रक्रिया है कि stdout और stderr पार्स जाएगा में जाना चाहता है, तो उपयोगकर्ता 2> & 1 का उपयोग stdout में stderr रीडायरेक्ट करने के लिए कर सकते हैं।

your_script 2>&1 | downstream_process 

आप उत्पादन दोनों चेतावनी और stdout के लिए किसी भी सामान्य डेटा, उपयोगकर्ता सब कुछ पार्स करने के बिना डेटा की चेतावनी को अलग करने का कोई अच्छा तरीका है। तो stderr को चेतावनियां भेजना आपकी स्क्रिप्ट को और अधिक लचीलापन देता है।

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