Kuruluş modu kod bloğunda hataları ve uyarıları görüntüleme


12

Bir Org dosyasındaki bir Python kod bloğunu değerlendirirken uyarıları ve hataları bildirmek istiyorum.

Bir kod bloğunda Python sözdizimi hataları varsa, Org bunları yararlı bir arabellek içinde açar *Org-Babel Error Output*. Bir dizi sonucunu tablo olarak kullanarak Org moduna döndürme yeteneğini korurken kendi uyarılarımı da gönderebilmem iyi olur :results value.

Açık olmak gerekirse, işte işe yarayabileceğini düşündüğüm şeyin kukla bir örneği:

#+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   |

Eklemek için düzenlendi: Kuruluş modu listesindeki bu tartışma, hata çıktısının yalnızca kod bloğu değerlendirmesi başarısız olduğunda görüntülendiğini göstermektedir. Yani bu mümkün gibi görünüyor, ama sadece exit(1)veya benzeri değerlendirmeyi iptal ederek .


Constantine'nin cevabı benim için mükemmel çalışıyor, eğer sizin için de bir çözümse lütfen cevabı kabul edin, eğer sorunuz güncellenmezse, lütfen.
atevm

Yanıtlar:


6

Eric Schulte tarafından org-modeposta listesinde açıklandığı gibi (sorudaki bağlantıya bakın) bunu org-babel-evalbaşarmak için değiştirebiliriz :

(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)))))

Şimdi org-babel-eval-verboseolarak ayarlanırsa t, kaynak kodu bloğunun değerlendirilmesi sırasında stderr'a yazdırılan çıktı, tıpkı kaynak kodu değerlendirmesi başarısızmış gibi ayrı bir pencerede gösterilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.