मान लें कि मेरे पास दो पायथन स्क्रिप्ट A.py
और B.py
हैं।एक अन्य पायथन प्रोग्राम (कुछ आवश्यकताओं के साथ) से पाइथन प्रोग्राम चलाएं
- बी मानना है कि यह
__main__
है (ताकि बी में एकif __name__=="__main__"
ब्लॉक में है कि कोड चलेंगे) - बी वास्तव में नहीं है: मैं एक तरीका है कि इस तरह से एक के भीतर से बी को चलाने के लिए देख रहा हूँ
__main__
(उदाहरण के लिए, ऐसा नहीं है, उदाहरण के लिए, sys.modules में"__main__"
प्रविष्टि को ओवरराइट करें) - बी के भीतर उठाए गए अपवादों को ए (यानी,
except
ए में क्लॉज के साथ पकड़ा जा सकता है)। - उन अपवादों को छोड़कर यदि पकड़े नहीं, बी
मैं विभिन्न तकनीकों की कोशिश की है के भीतर एक सही ट्रैस बैक संदर्भित लाइन नंबर जेनरेट, लेकिन कोई भी मेरी सभी आवश्यकताओं को पूरा करने लगते हैं।
- उपप्रक्रिया मॉड्यूल से उपकरणों का उपयोग का मतलब बी में अपवाद ए के लिए प्रचार नहीं करते
execfile("B.py", {})
रन बी, लेकिन यह यह मुख्य है नहीं लगता है।execfile("B.py", {'__name__': '__main__'})
बीटीवी को लगता है कि यह मुख्य है, लेकिन यह अपवाद ट्रेसबैक प्रिंटिंग को भी खराब कर रहा है, ताकि ट्रेसबैक ए (यानी वास्तविक__main__
) के भीतर लाइनों को संदर्भित कर सकें।__main__
साथimp.load_source
का उपयोग कर के रूप में नाम लगभग काम करता है, सिवाय इसके कि यह वास्तव में sys.modules को संशोधित करता है, इस प्रकार__main__
के मौजूदा मूल्य पर stomping वहाँ किसी भी तरह से मैं क्या चाहते हैं पाने के लिए है?
(कारण मैं ऐसा कर रहा हूं क्योंकि मैं मौजूदा पुस्तकालय पर कुछ सफाई कर रहा हूं। इस पुस्तकालय में कोई वास्तविक परीक्षण सूट नहीं है, केवल "उदाहरण" स्क्रिप्ट का एक सेट है जो कुछ आउटपुट उत्पन्न करता है। मैं कोशिश कर रहा हूं यह सुनिश्चित करने के लिए परीक्षणों के रूप में लाभ उठाने के लिए कि मेरा क्लीनअप इन उदाहरणों को निष्पादित करने की लाइब्रेरी की क्षमता को प्रभावित नहीं करता है, इसलिए मैं प्रत्येक टेस्ट सूट में से प्रत्येक उदाहरण स्क्रिप्ट को चलाने के लिए चाहता हूं। मैं इन स्क्रिप्ट से अपवाद देख सकता हूं टेस्ट स्क्रिप्ट इसलिए परीक्षण स्क्रिप्ट एक सामान्य सबप्रोसेसर त्रुटि की रिपोर्ट करने की बजाय विफलता के प्रकार की रिपोर्ट कर सकती है, जब भी एक उदाहरण स्क्रिप्ट कुछ अपवाद उठाती है।)
दिलचस्प समाधान। मुझे संदेह है (और उम्मीद है ..) मुझे कभी इसकी आवश्यकता होगी, लेकिन चीजें पाइथन की अनुमति देता है और सक्षम बनाता है। –