2012-09-11 33 views

उत्तर

18

आप एक अपवाद फेंका जब आदेश मौजूद नहीं है करना चाहते हैं, तो आप subprocess उपयोग करना चाहिए:

import subprocess 
try: 
    subprocess.call(['wrongcommand']) 
except OSError: 
    print ('wrongcommand does not exist') 

यह सोचने के लिए आओ, तो आप शायद os.system के बजाय subprocess वैसे भी उपयोग करना चाहिए ...

+0

धन्यवाद, यह वही है जो मुझे चाहिए था। – Cinder

1

wrongcommand: command not found शेल os.system का आउटपुट कमांड का आह्वान करने के लिए उपयोग कर रहा है। os.system एक अपवाद

संपादित फेंक नहीं किया: mgilson की टिप्पणी

+0

धन्यवाद, लेकिन आप इसे पाइथन में कैसे पकड़ते हैं? क्या यह भी संभव है? – Cinder

+1

हां, लेकिन 'os.system()' का उपयोग नहीं कर रहा है। यह एक कारण है कि आपको 'सबप्रोसेस' मॉड्यूल का उपयोग क्यों करना चाहिए, जैसा कि @ mgilson के उत्तर में उल्लिखित है। –

+0

अधिक विशेष रूप से, 'गलत कमांड: कमांड नहीं मिला' * shell * का आउटपुट है जो 'os.system' कमांड का आह्वान करने के लिए उपयोग कर रहा है।(एक अलग 'पथ' के साथ एक अलग खोल कमांड मिल सकता है)। – mgilson

3

की प्रतिलिपि और चिपकाने हिस्सा द्वारा संपादित वहाँ अपने कोड स्निपेट में दो समस्याएं हैं। सबसे पहले, try: ... except: कभी न करें, हमेशा उस अपवाद के बारे में विशिष्ट रहें जिसे आप संभालना चाहते हैं। अन्यथा, आपका प्रोग्राम किसी भी तरह की त्रुटि को निगलता है, जिन्हें आप उम्मीद नहीं करते हैं। ज्यादातर मामलों में, यह रनटाइम के दौरान किसी अन्य बिंदु पर अप्रत्याशित व्यवहार का कारण बन जाएगा।

इसके अलावा, os.system() कॉलों को अधिकांश समय subprocess मॉड्यूल से उनके समकक्षों द्वारा प्रतिस्थापित किया जाना चाहिए।

यह देखने के लिए कि क्या गलत है, कोशिश करें/ब्लॉक को छोड़कर वास्तव में ट्रेसबैक/अपवाद देखें। जैसा कि अन्य ने बताया है, आप देखेंगे कि आपके मामले में कोई अपवाद नहीं है, यही कारण है कि आपकी कस्टम स्ट्रिंग मुद्रित नहीं होती है।

नीचे पंक्ति: इस बारे में सोचें कि आपके कोड ब्लॉक में कौन से विशिष्ट अपवाद हो सकते हैं। उन लोगों के बारे में सोचें जिनके बारे में आप कुछ कारणों से होने की उम्मीद करते हैं और उनको उचित तरीके से संभालें। उन लोगों को संभाल न दें जिन्हें आप उम्मीद नहीं करते हैं।

9

क्योंकि os.system() विधि

  • वापसी मान = 0 के निकास कोड के माध्यम से एक विफलता को इंगित करता है -> सब कुछ ठीक
  • वापसी मान = 0 -> कुछ त्रुटि

कॉल कमांड का निकास कोड सीधे पाइथन पर वापस भेज दिया जाता है।

दस्तावेज आपको बता रहा है कि os.system() विफलता के मामले में एक निष्पादन बढ़ाएगा। os.system() बस ओएस की अंडरलेइंग सिस्टम() कॉल को कॉल करता है और इसके रिटर्न वैल्यू देता है।

कृपया os.system() दस्तावेज़ीकरण ध्यान से पढ़ें।