एक org- मोड कोड ब्लॉक में त्रुटियों और चेतावनियों को प्रदर्शित करें


11

जब मैं एक ओआरजी फ़ाइल में पायथन कोड ब्लॉक का मूल्यांकन कर रहा हूं, तो मुझे चेतावनी और त्रुटियों की रिपोर्ट करने में सक्षम होना चाहिए।

जब एक कोड ब्लॉक में पायथन सिंटैक्स त्रुटियां होती हैं, तो ऑर्ग मदद से उन्हें एक अलग बफर में पॉप अप करता है जिसे कहा जाता है *Org-Babel Error Output*। यह अच्छा होगा कि मैं अपनी स्वयं की चेतावनियों को भी वहाँ भेज सकूँ, जबकि एक सारणी के रूप में ऑर्ग मोड में एक सरणी परिणाम वापस करने की क्षमता को बरकरार रखते हुए :results value

स्पष्ट होने के लिए, यहाँ पर इस बात का एक उदाहरण है कि मुझे लगा कि यह काम कर सकता है:

#+BEGIN_SRC python 
    import sys
    sys.stderr.write('Warning.\n')
    sys.stderr.flush()
    return [['Table', 'header'], ['table', 'data']]
#+END_SRC

#+RESULTS:
| Table | header |
| table | data   |

जोड़ने के लिए संपादित: ऑर्ग-मोड सूची पर यह चर्चा बताती है कि त्रुटि आउटपुट केवल तब प्रदर्शित होता है जब कोड-ब्लॉक मूल्यांकन विफल हो जाता है। तो ऐसा लगता है कि यह संभव है, लेकिन केवल मूल्यांकन का उपयोग करके exit(1)या इसी तरह के गर्भपात से ।


कॉन्स्टेंटाइन का जवाब मेरे लिए पूरी तरह से काम करता है, अगर यह आपके लिए भी एक समाधान है, तो कृपया उत्तर को स्वीकार करें, यदि यह आपके प्रश्न को अपडेट नहीं करता है, तो कृपया।
21

जवाबों:


6

org-modeमेलिंग सूची में एरिक शुल्ते द्वारा वर्णित (प्रश्न में लिंक देखें) हम इसे org-babel-evalप्राप्त करने के लिए संशोधित कर सकते हैं :

(defvar org-babel-eval-verbose t
  "A non-nil value makes `org-babel-eval' display")

(defun org-babel-eval (cmd body)
  "Run CMD on BODY.
If CMD succeeds then return its results, otherwise display
STDERR with `org-babel-eval-error-notify'."
  (let ((err-buff (get-buffer-create " *Org-Babel Error*")) exit-code)
    (with-current-buffer err-buff (erase-buffer))
    (with-temp-buffer
      (insert body)
      (setq exit-code
            (org-babel--shell-command-on-region
             (point-min) (point-max) cmd err-buff))
      (if (or (not (numberp exit-code)) (> exit-code 0)
              (and org-babel-eval-verbose (> (buffer-size err-buff) 0))) ; new condition
          (progn
            (with-current-buffer err-buff
              (org-babel-eval-error-notify exit-code (buffer-string)))
            nil)
        (buffer-string)))))

अब यदि org-babel-eval-verboseसेट किया जाता है t, तो स्रोत कोड ब्लॉक के मूल्यांकन के दौरान स्टडर्र में मुद्रित आउटपुट को अलग विंडो में दिखाया जाता है जैसे कि स्रोत कोड मूल्यांकन विफल हुआ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.