조직 모드 코드 블록에 오류 및 경고 표시


11

Org 파일에서 Python 코드 블록을 평가할 때 경고 및 오류를보고하고 싶습니다.

코드 블록에 Python 구문 오류가있는 경우 Org는이라는 별도의 버퍼에 오류를 표시합니다 *Org-Babel Error Output*. 를 사용하여 배열 결과를 테이블로 Org 모드에 반환하는 기능을 유지하면서 내 자신의 경고도 거기에 보낼 수 있으면 좋을 것 :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)하거나 이와 유사한 방식으로 평가를 중단해야합니다 .


Constantine의 답변은 나에게 완벽하게 작동합니다. 또한 솔루션이기도하다면 질문을 업데이트하지 않으면 답변을 수락하십시오.
atevm

답변:


6

에릭 슐트 (Eric Schulte)가 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, 소스 코드 블록의 평가 기간 동안 stderr로 인쇄 출력은 소스 코드의 평가가 실패한 것처럼 별도의 창에 표시됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.