2010-02-19 14 views
20

मैं काफी जटिल परियोजना पर काम कर रहा हूं और समय के बाद मुझे स्टैक निशान देखने में समस्याएं कम करनी पड़ती हैं। वे बहुत लंबे समय तक होते हैं और एक ही समय में "मेरा" कोड, मानक पुस्तकालय कोड और तृतीय पक्ष पुस्तकालय कोड शामिल करते हैं। अधिकांश समय वास्तविक समस्या "मेरे" कोड में होती है और इसे तुरंत एक स्टैक ट्रेस में ढूंढने से आंखों के लिए थोड़ा मुश्किल होता है। "मेरे" कोड के तहत मेरा मतलब है कि वर्तमान कार्य निर्देशिका के तहत कोड है।हाइलाइटिंग पायथन स्टैक निशान

तो मुझे एहसास हुआ कि मुझे ऐसा कुछ चाहिए जो स्टैक निशान और मेरी रेखाओं को हाइलाइट करेगी। original से highlighted की तुलना करें।

मुझे लगता है कि मैं इस तरह से इस्तेमाल कर सकते हैं एक अजगर स्क्रिप्ट लिख सकते हैं:

nosetests | colorize_stack_trace.py 

लेकिन मेरा मानना ​​है कि इस का उपयोग करते हुए लिनक्स टूलसेट करने के लिए एक तेज और अधिक सुरुचिपूर्ण तरीका है। कोई विचार?

युपीडी:

pyst() { 
    rc=/tmp/spcrc; 
    echo '#################### ### # # # ########################################' > $rc; 
    echo '      blk 0 r ^(.*)$' >> $rc; 
    echo '      mag b 0 r ^\s*File "'`pwd`'/(.*)"' >> $rc; 
    spc -c $rc; 
} 

अब मैं क्या कर सकते हैं:

डेनिस विलियमसन ने सुझाव दिया supercat का उपयोग करना, मध्यवर्ती परिणाम बैश समारोह पीछा कर रहा है

nosetests 2>&1 | pyst 
नहीं

भी सुंदर, लेकिन कुछ डिग्री पर काम करता है। दो समस्याएं बाकी हैं:

  1. मुझे नोसेटेट पूर्ण होने से पहले कोई आउटपुट नहीं दिखाई दे रहा है। अर्थात। मुझे प्रगति दिखाई नहीं दे रही है।
  2. मुझे 2> & 1 बार बार लिखना है।

युपीडी 2:

इस सवाल मेरे मन में मुख्य रूप से nosetests था पूछ। और मुझे अभी बहुत अच्छा समाधान मिला: rednose नाक प्लगइन। यह उन पथों को हाइलाइट करता है जो स्थानीय हैं और कई आसान पठनीयता चीजें करते हैं।

मूल प्रश्न पर लौटना: सुपरकैट के साथ मैंने जो समस्याएं देखी हैं, वे पूरी तरह से उससे संबंधित नहीं हैं लेकिन यह यूनिक्स शैल स्ट्रीमिंग, फ़्लशिंग, पाइपिंग, रीडायरेक्टिंग की समस्या है। तो प्रश्न के उत्तर के रूप में पूछा गया है कि मैं एक जवाब स्वीकार करता हूं जो सुपरकैट सुझाता है।

+0

rednose अच्छा है। आप अपने '.noserc' –

उत्तर

6

Supercat (एसपीसी) पर एक नज़र डालें। यह एएनएसआई और एचटीएमएल दोनों हाइलाइटिंग करता है और आपके विशेष आउटपुट के लिए कॉन्फ़िगर किया जा सकता है। यह सी और पायथन में स्रोत कोड फ़ाइलों के लिए कुछ कॉन्फ़िगरेशन फ़ाइलों के साथ आता है, उदाहरण के लिए और लॉग फ़ाइलें, चेंजलॉग, diffs और अन्य।

less -p regex file_name 

या

some_command | less -p regex 
1

शायद आप cgitb मॉड्यूल (लघु आधिकारिक दस्तावेज़ here) का उपयोग शुरुआती बिंदु के रूप में कर सकते हैं (यह अच्छा HTML ट्रेसबैक बनाता है)। आपको आवश्यक संशोधन करने के लिए अपेक्षाकृत सरल होना चाहिए (उदाहरण के लिए फ़ाइल पथ के अनुसार रंग टैग जोड़ें)। लेकिन निश्चित रूप से यह केवल व्यवहार्य है यदि आप निशान देखने के लिए ब्राउज़र का उपयोग करने के इच्छुक हैं।

+0

पर' rednose = 1' जोड़कर डिफ़ॉल्ट रूप से सक्षम कर सकते हैं संकेत के लिए धन्यवाद, लेकिन यह परीक्षण परिणामों को देखने के लिए ब्राउज़र का उपयोग करने के लिए थोड़ा अजीब है। एक्शन स्क्रिप्ट और क्विनीट की तरह बदबू आ रही है। जितना लचीला नहीं हो सकता है :) – nkrkv

+0

@nailxx आप इसे और देखना चाहते हैं। आधिकारिक डॉक्टर से: 'इसे मूल रूप से सीजीआई स्क्रिप्ट के लिए एचटीएमएल में व्यापक ट्रेसबैक जानकारी प्रदर्शित करने के लिए डिज़ाइन किया गया था। बाद में इसे सादा पाठ में इस जानकारी को प्रदर्शित करने के लिए सामान्यीकृत किया गया। –

0

रंग बदलने (और अन्यथा स्वरूपण) पाठ के लिए प्रारंभिक बिंदु के रूप में, आप शायद curses library पर देखना चाहेंगे। this how-to भी देखें, जो उपयोगी लगता है।

सभी कार्यक्रमों के लिए पाइथन की अंतर्निहित त्रुटि प्रबंधन को ओवरराइड करने के लिए ... मैंने कभी कोशिश नहीं की है, लेकिन मुझे लगता है कि इसमें कुछ निम्न स्तर के परिवर्तन शामिल होंगे। आप हमेशा अपने कोड को एक विशाल कोशिश/ब्लॉक को छोड़कर लपेट सकते हैं, लेकिन मुझे लगता है कि आप ऐसा नहीं करना चाहते हैं।मैं एक छोटी सी लिपि लिखने के अधिक यूनिक्स दृष्टिकोण का पक्ष लेता हूं जो एक काम करता है, और यह अच्छी तरह से करता है: क्या यह एक इनपुट लेता है और, यदि यह एक स्टैक ट्रेस है, तो इसे रंगीन करें। अन्यथा, अपरिवर्तित के माध्यम से पाठ पास करें। एक पाइप का उपयोग करना, जैसा कि आपने सुझाव दिया है, सबसे अच्छा तरीका हो सकता है। (इस मामले में, पाइप stderr करने के लिए आप इस तरह कुछ करना चाहते हैं, जो पाइपिंग से पहले stdout के साथ stderr विलय: cmd1 2>&1 | cmd2)

-1

लोड vim में पाठ:

nosetests | vim - 

सेट vim को

पर vim के लिए डेव किर्बी के सुझाव आधार पर, इस कुछ ऐसा ही एक खोज

से मेल खाने वाली सभी पंक्तियों को हाइलाइट करें अपने पथ के साथ सभी लाइनों पर प्रकाश डाला जाएगा - "अपने" पथ

/.*/path/to/my/code.* 

देखा के साथ लाइनों के लिए

:set hlsearch 

खोजें।

आप अगली पंक्ति को उजागर करने के साथ-साथ तो आप ऐसा भी कर सकते हैं:

/.*/path/to/my/code.*\n.* 
20

वास्तव में, वहाँ एक महान अजगर वाक्यविन्यास पर प्रकाश डाला पुस्तकालय Pygments कहा जाता है, जो भी ट्रेस बैक को उजागर करने में सक्षम है। यहां एक example है (यहां पेस्टबिन पाइगल्स का उपयोग करता है)।

तो, तुम सब करने की है:

$ easy_install pygments # downloads and installs pygments 
$ cat traceback.txt | pygmentize -l pytb 

"pytb" PythonTracebackLexer के लिए शॉर्टकट है। पाइथन 3 ट्रेसबैक के लिए एक विशेष लेक्सर भी शामिल है, जिसे "py3tb" कहा जाता है।

आप विभिन्न प्रारूपों में आउटपुट प्रारूपित कर सकते हैं (एचटीएमएल, लेटेक्स, एसवीजी, कई छवि प्रारूपों सहित)। लेकिन वहाँ भी एक टर्मिनल फ़ॉर्मेटर उपलब्ध है ऐसा दिखाई दे सकता है जो (और अगर आप सोच रहे हैं ... जाहिर है वहाँ अलग रंग विषयों उपलब्ध हैं!):

Pygments Console Traceback Highlighting http://www.tux21b.org/public/pygments-pytb.png

आप किसी अन्य फ़ॉर्मेटर चयन करने के लिए उपयोग कर सकते हैं -f html (उस मामले में, एचटीएमएल फॉर्मेटर)।

सादर,
क्रिस्टोफ

+0

कूल विकल्प, पिक्गर्स के लिए spc – nkrkv

+0

+1 के लिए एक अच्छा विकल्प हो सकता है। यह मधुमक्खी की घुटनों है। – jathanism

+2

क्या किसी अन्य उपकरण पर कुछ भी पाइप किए बिना पाइथन को जादुई रूप से ट्रेसबैक रंगीन करने का कोई तरीका है? – azmeuk

0

इसके अलावा, आप vim साथ ट्रैस फ़ाइल खोल सकते हैं, :cfile आदेश का उपयोग। फिर आप :copen कमांड का उपयोग कर ट्रेसबैक में फ़ाइलों की हाइलाइट की गई एंटी इंटरैक्टिव सूची खोल सकते हैं और संबंधित vim कमांड के सेट का उपयोग करके इन फ़ाइलों के बीच कूद सकते हैं।

0

वहाँ सिर्फ इतना है कि इस प्रयोजन के लिए एक अच्छा मॉड्यूल है:

तुम सिर्फ डाउनलोड करने और पिप के माध्यम से इसे स्थापित किया है:

pip install colored-traceback 

आयात यह exmapl के लिए, अपने प्रोजेक्ट की एक शीर्ष-स्तरीय फ़ाइल में है इस तरह ई:

if DEBUG: 
    import colored_traceback 
    colored_traceback.add_hook() 

और तुम है कि हर छोटा सा अफसर फ़ाइल के लिए की तरह एक ट्रैस बैक मिलता है (रंग भिन्न हो):

Traceback (most recent call last): 
    File "./workflowy.py", line 525, in <module> 
    main() 
    File "./workflowy.py", line 37, in main 
    projects = cli.load_json(args, input_is_pipe) 
    File "./workflowy.py", line 153, in load_json 
    return json.load(sys.stdin) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 290, in load 
    **kw) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 383, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 
संबंधित मुद्दे