2017-01-19 15 views
5

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

मुझे पता है कि मैं अपवाद उत्पन्न कर सकता हूं, या मैं pdb.set_trace() चलाकर डीबगर का आह्वान कर सकता हूं, फिर डीबगर को रोक सकता हूं, जो कि मैं वर्तमान में उपयोग करता हूं।

... लेकिन क्या कोई ऐसा आदेश है जो स्क्रिप्ट को रोक देगा, जैसे कि यह बस इसके अंत तक पहुंच गया था? यह पूरे स्क्रिप्ट की टिप्पणी करने के बराबर होगा (लेकिन मुझे ऐसा नहीं करना पड़ेगा), या किसी फ़ंक्शन में return कथन डालना होगा।

ऐसा लगता है जैसे ऐसा कुछ मौजूद होना है लेकिन मुझे अब तक यह नहीं मिला है।

संपादित करें: मेरी USECASE से कुछ अधिक जानकारी के

मैं सामान्य रूप से स्पाइडर में नियमित रूप से अजगर को शान्ति उपयोग कर रहा हूँ। आईपीथन एक अच्छी चीज की तरह दिखता है लेकिन (कम से कम संस्करण के लिए मैं वर्तमान में 2.2.5 पर हूं) सामान्य कंसोल की कुछ विशेषताएं आईपीथॉन (आत्मनिरीक्षण, ऑटो-पूर्णता) में अच्छी तरह से काम नहीं करती हैं। अधिकतर नहीं, मेरा कोड matplotlib आंकड़े उत्पन्न करता है। डीबग मोड में, जिन्हें अपडेट नहीं किया जा सकता है (मेरे ज्ञान के लिए), यही कारण है कि मुझे पूरी तरह से स्क्रिप्ट से बाहर निकलने की ज़रूरत है, लेकिन दुभाषिया नहीं)। डीबगर की एक और सीमा यह है कि मैं इसमें लूप निष्पादित नहीं कर सकता: आप नियमित लूप में लूप के लिए कोड कॉपी/पेस्ट कर सकते हैं और इसे निष्पादित कर सकते हैं, लेकिन यह डीबगर में काम नहीं करेगा (कम से कम मेरे स्पाइडर संस्करण)।

+0

किसी भी विशिष्ट कमांड के लिए बात नहीं कर सकता लेकिन PyCharm एक सुंदर मीठा आईडीई है और यह आपको इस तरह की चीजें करने देता है। जब आप ब्रेकपॉइंट हिट करते हैं तो यह आपको किसी भी चर के दायरे में मनमाने ढंग से अभिव्यक्तियों का मूल्यांकन करने देता है। – Tagc

+0

क्यों न केवल पीडीबी का उपयोग करें और एक ब्रेकपॉइंट सेट करें जहां आप कोड को रोकना चाहते हैं? –

उत्तर

1

यदि आप पाइथन शेल का उपयोग कर रहे हैं, तो कीबोर्ड इंटरप्ट को फेंकने के लिए बस CTRL + C दबाएं। अपवाद फेंकने के समय आप प्रोग्राम की स्थिति देख सकते हैं।

x = 0 
while True: 
    x += 1 

स्क्रिप्ट चल रही है ...

अजगर 2.7.6 (डिफ़ॉल्ट, 10 Nov, 2013 19:24:18) [एमएससी v.1500 32 बिट (इंटेल)] Win32 पर अधिक जानकारी के लिए "कॉपीराइट", "क्रेडिट" या "लाइसेंस()" टाइप करें। >>> ================================ RESTART ============= ===================

Traceback (सबसे हाल कॉल पिछले):

फ़ाइल "C: /Python27/test.py", पंक्ति 2,

में यह सच है, जबकि:

KeyboardInterrupt

>>> एक्स

5

यदि आप python -i <script> के साथ अपना प्रोग्राम आमंत्रित करते हैं, तो स्क्रिप्ट समाप्त होने के बाद दुभाषिया सक्रिय रहेगा। raise SystemExit इसे मनमाने ढंग से बिंदु पर समाप्त करने के लिए मजबूर करने का सबसे आसान तरीका होगा।

+0

ऐसा लगता है कि आईपीथॉन में अच्छी तरह से काम करता है, और यदि मैं एक समर्पित उदाहरण में स्क्रिप्ट लॉन्च करता हूं तो यह नियमित दुभाषिया में काम करता है। अगर मैं इसे पहले खोले गए कंसोल से चलाता हूं, तो यह कंसोल को स्क्रिप्ट के साथ बंद कर देगा। क्या कोई और अपवाद है जो कोई ट्रेसबैक नहीं करता है और कंसोल बंद नहीं करेगा? मैंने कोशिश किए गए सभी अन्य अपवादों को कंसोल खोलना होगा, लेकिन ट्रेसबैक का कारण बन जाएगा। स्वीकार्य लेकिन सुंदर नहीं है। – Zak

3

आप IPython है (अत्यधिक, अत्यधिक की सिफारिश की), आप अपने कार्यक्रम में किसी भी बिंदु पर जाएँ और निम्नलिखित लाइनों

import IPython 
IPython.embed() 

जोड़ सकते हैं एक बार अपने कार्यक्रम उस बिंदु तक पहुँच जाता है, embed आदेश एक खुल जाएगा उस संदर्भ में नया आईपीथन खोल।

मैं वास्तव में क्या करने के लिए है कि चीजें जहाँ मैं पूर्ण pdb मार्ग से जाने के लिए नहीं करना चाहते हैं के लिए पसंद करते हैं।

+0

मैंने अभी कोशिश की है और यह निफ्टी है, गैर-आईपीथॉन कंसोल में चलते समय भी काम करता है, और मैं बाहर निकलने के साथ निष्पादन जारी रख सकता हूं()। - मुझे मिली समस्याएं हैं कि matplotlib आंकड़े जमे हुए हैं, जैसे कि डीबगर के साथ, कि मैं केवल अपना नाम दर्ज करके और एंटर मारकर सिंगल-लेटर वैरिएबल (जैसे डीबगर में) से पूछताछ नहीं कर सकता, और यदि मैं बाकी का रन चलाता हूं स्क्रिप्ट, ऐसा लगता है कि मुझे एक आईपीथन कंसोल में छोड़ दिया गया है, लेकिन यह पहले नियमित रूप से एक था। - ओह, यह IPython कंसोल से चलते समय काम नहीं करता है! मेरे लिए कोई समस्या नहीं है लेकिन इसका उल्लेख किया जाना चाहिए। – Zak

+0

हू यह अजीब है, मैं बिना किसी समस्या के matplotlib का उपयोग कर सकते हैं। और चर पूछताछ एक समस्या नहीं है। – Lagerbaer

+0

इनलाइन आंकड़े काम करते हैं लेकिन मेरे सभी कार्यक्रम क्यूटी बैकएंड और अलग खिड़कियों का उपयोग करते हैं। मैं उन्हें अपडेट कर सकता हूं लेकिन कार्यक्रम जारी रखने के बाद ही बदलावों को ही देख सकूंगा। चर के लिए, मैं आमतौर पर वेरिएबल इंस्पेक्टर का उपयोग करता हूं लेकिन फिर ''a = 5'' को परिभाषित करता हूं, फिर बस ''''' दर्ज करें और एंटर दबाएं। मेरे मामले में कोई प्रतिक्रिया नहीं है, हालांकि यह '' a_variable = 5'' के लिए काम करता है, और '' a + 2'' भी सही तरीके से काम करता है। यह स्पाइडर में कुछ हो सकता है। फिर भी काम करने में आसान है लेकिन फिर भी परेशान है। – Zak

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