3.3 documentation से:
stdin, stdout और stderr निष्पादित कार्यक्रम के मानक इनपुट, मानक निर्दिष्ट क्रमशः आउटपुट और मानक त्रुटि फ़ाइल हैंडल। वैध मान PIPE, DEVNULL, एक मौजूदा फ़ाइल डिस्क्रिप्टर (एक सकारात्मक पूर्णांक), एक मौजूदा फ़ाइल ऑब्जेक्ट, और कोई नहीं हैं।
तो:
subprocess.check_call(['java', '-jar', 'foo.jar'], stdout=subprocess.DEVNULL)
यह केवल 3.3 और बाद में मौजूद है। लेकिन प्रलेखन कहते हैं:
DEVNULL इंगित करता है कि विशेष फ़ाइल os.devnull इस्तेमाल किया जाएगा।
और os.devnull
तरह से वापस 2.4 करने के लिए (से पहले से ही अस्तित्व में subprocess
) मौजूद है। कि तुम उस एक ही पंक्ति में फिट नहीं करता है कुछ और अधिक जटिल कर रहे हैं, आप Popen
के पूरे जीवन के लिए devnull
खुला रखने की जरूरत है
with open(os.devnull, 'w') as devnull:
subprocess.check_call(['java', '-jar', 'foo.jar'], stdout=devnull)
नोट: तो, आप एक ही बात मैन्युअल रूप से कर सकते हैं ऑब्जेक्ट, न केवल इसके निर्माण।
/dev/null
(इसे POSIX) या NUL:
(विंडोज़) के लिए पुनः निर्देशित का लाभ कर सकते हैं (यही है, पूरी बात with
बयान के अंदर डाल दिया।) आप एक अनावश्यक पाइप बनाने नहीं है, और अधिक महत्वपूर्ण बात है, ' किनारे के मामलों में भाग नहीं लेते हैं जहां उस पाइप को लिखने पर उपप्रोसेस ब्लॉक।
नुकसान यह है कि, सिद्धांत में, subprocess
कुछ प्लेटफार्मों पर काम कर सकता है जो os.devnull
नहीं है। यदि आप केवल पॉसिक्स और विंडोज, पीपीपी और ज्योथन (जो आप में से अधिकांश हैं) पर सीपीथॉन की परवाह करते हैं, तो यह कभी भी कोई समस्या नहीं होगी। अन्य मामलों के लिए, अपना कोड वितरित करने से पहले परीक्षण करें।
+1: devnull के लिए। सुनिश्चित करें कि subprocess जीवित है, जबकि 'devnull' खुला रहता है (साथ-साथ कथन का अर्थ अन्यथा है)। अंतिम पैराग्राफ अनावश्यक लगता है: DEVNULL को ऑप्शन में ओशनडेन के माध्यम से लागू किया गया है। os.devnull ज्योथन के साथ काम करता है। – jfs
@ जेएफ। सेबेस्टियन: 'चेक_call' (जो' के साथ 'के अंदर है) के बाद,' devnull' की आवश्यकता नहीं है। लेकिन हाँ, शायद मुझे यह स्पष्ट करना चाहिए कि अधिक जटिल उपयोग के मामलों के लिए जो एक पंक्ति में फिट नहीं होते हैं, पूरी चीज को 'पॉप' के साथ 'साथ' के अंदर होना चाहिए। – abarnert
@JFSebastian: इस बीच, 'os.devnull' के लिए, क्या वास्तव में यह' प्लेटफॉर्म 'मौजूद प्रत्येक प्लेटफॉर्म पर मौजूद होने की गारंटी है, इसलिए "उपयोग करने से पहले जांचने" की कोई आवश्यकता नहीं है, या क्या आप जानते हैं कि यह भी मौजूद है ज्योथन पर और इसलिए मुझे ज्योथन को उन प्लेटफार्मों की सूची में ले जाना चाहिए जिन्हें आपको जांचने की आवश्यकता नहीं है? – abarnert