दिलचस्प पोस्ट
रेल में फ़ाइल डाउनलोड लिंक मैं iPhone पर ARP तालिका कैसे पूछूं? एंड्रॉइड 2.3 वाईफाई हॉटस्पॉट एपीआई एंड्रॉइड: एक सर्वर पर समय-समय पर स्थान कैसे भेजा जाता है DirectoryIndex को तोड़ने के बिना .htaccess के साथ .php एक्सटेंशन निकालें जावा के माध्यम से सीएमडी आज्ञाओं को कैसे कार्यान्वित करें निष्क्रिय स्थिति दर्ज करने से विंडोज को कैसे रोकें? लोचदार खोज के साथ एक शब्द के एक भाग की खोज कैसे करें सहेजें और एक फ़ाइल से MemoryStream को लोड करें वर्तमान वर्ष जावास्क्रिप्ट में प्राप्त करें विजुअल स्टूडियो 2012 वेब प्रकाशित फाइल कॉपी नहीं करता है पायथन – विंडोज शट डाउन इवेंट्स Photos.app से अंतिम चित्र प्राप्त करें? जावा का उपयोग कर सेलेनियम वेबड्राइवर का उपयोग करके क्रोम प्रोफ़ाइल लोड करें अजगर: मेरी प्रतिलिपि चर में परिवर्तन मूल चर को प्रभावित करता है

पायथन 2.7 में सबप्रोसेक्शन के आउटपुट को छिपाने के तरीके

मैं Ubuntu पर eSpeak का उपयोग कर रहा हूँ और एक पायथन 2.7 स्क्रिप्ट है जो प्रिंट करता है और एक संदेश बोलता है:

import subprocess text = 'Hello World.' print text subprocess.call(['espeak', text]) 

eSpeak वांछित ध्वनियों का उत्पादन करता है, लेकिन कुछ त्रुटियों (एएलएसए एबीएस …, कोई सॉकेट कनेक्ट नहीं है) के साथ शैल को छोड़ देता है, इसलिए मैं इसे आसानी से नहीं पढ़ सकता जो पहले छपा हुआ था। निकास कोड 0 है

दुर्भाग्यवश, इसकी वर्बोजिटी को बंद करने का कोई दस्तावेज विकल्प नहीं है, इसलिए मैं केवल एक दृष्टि से इसे चुप्पी और आगे की बातचीत के लिए खुले शेल को रखने का एक तरीका तलाश रहा हूं।

मैं यह कैसे कर सकता हूँ?

वेब के समाधान से एकत्रित समाधान "पायथन 2.7 में सबप्रोसेक्शन के आउटपुट को छिपाने के तरीके"

DEVNULL को आउटपुट रीडायरेक्ट करें:

 import os import subprocess FNULL = open(os.devnull, 'w') retcode = subprocess.call(['echo', 'foo'], stdout=FNULL, stderr=subprocess.STDOUT) 

यह प्रभावी रूप से इस शेल कमांड को चलाने के समान है:

 retcode = os.system("echo 'foo' &> /dev/null") 

यहां एक और अधिक पोर्टेबल संस्करण है (मस्ती के लिए, यह आपके मामले में आवश्यक नहीं है):

 #!/usr/bin/env python # -*- coding: utf-8 -*- from subprocess import Popen, PIPE, STDOUT try: from subprocess import DEVNULL # py3k except ImportError: import os DEVNULL = open(os.devnull, 'wb') text = u"René Descartes" p = Popen(['espeak', '-b', '1'], stdin=PIPE, stdout=DEVNULL, stderr=STDOUT) p.communicate(text.encode('utf-8')) assert p.returncode == 0 # use appropriate for your program error handling here 

subprocess.check_output उपयोग करें (अजगर 2.7 में नया) यह stdout को दबाने और एक अपवाद बढ़ा देगा यदि कमांड विफल हो जाता है। (यह वास्तव में stdout की सामग्री देता है, इसलिए यदि आप चाहें तो बाद में अपने प्रोग्राम में इसका उपयोग कर सकते हैं।) उदाहरण:

 import subprocess try: subprocess.check_output(['espeak', text]) except subprocess.CalledProcessError: # Do something 

आप stderr को भी दबा सकते हैं:

  subprocess.check_output(["espeak", text], stderr=subprocess.STDOUT) 

2.7 से पहले के लिए, उपयोग करें

 import os import subprocess with open(os.devnull, 'w') as FNULL: try: subprocess._check_call(['espeak', text], stdout=FNULL) except subprocess.CalledProcessError: # Do something 

यहां, आप स्टेडरर को दबा सकते हैं

  subprocess._check_call(['espeak', text], stdout=FNULL, stderr=FNULL) 

अगर आप Python 2.7x के साथ विंडो में सबप्रोसेड मॉड्यूल का उपयोग करते हैं (इस प्रश्न के लिए विशिष्ट नहीं है लेकिन शीर्षक से मेल खाता है) और यह केवल ऐसी त्रुटियां हैं जिन्हें आप दबाना चाहते हैं (इस प्रश्न के लिए विशिष्ट), आप ऐसा कुछ कर सकते हैं:

output = subprocess.check_output(["arp", "-a", "-N", "127.0.0.2"], stderr=subprocess.STDOUT)

आप अपने सिस्टम पर उपर्युक्त कोड का प्रयोग करने में सक्षम होना चाहिए लेकिन अगर आपकी आर्च तालिका में 127.0.0.2 मौजूद है, तो आप उस आईपी को चुन सकते हैं जो इसके साथ जुड़ा हुआ कोई एनआईसी नहीं है।

कमानों का उपयोग क्यों नहीं करें। आउटपुट () इसके बजाय?

 import commands text = "Mario Balotelli" output = 'espeak "%s"' % text print text a = commands.getoutput(output)