2013-09-03 40 views
8

Tôi có thể thực thi mã Python đơn giản như thế nào trong Chế độ Org 'Org?Chế độ Orac Org: Thực thi mã python đơn giản

Ví dụ đầu tiên hoạt động tốt, tuy nhiên tôi không thể làm cho nó đưa cho tôi kết quả của phép tính đơn giản nhất:

; works 
#+begin_src python 
def foo(x): 
    if x>0: 
    return x+10 

    else: 
    return x-1 

return foo(50) 
#+end_src 

#+RESULTS: 
: 60 

; does not work 
#+begin_src python 
1+1 
#+end_src 

#+RESULTS: 
: None 

; does not work 
#+begin_src python 
print(1+1) 
#+end_src 

#+RESULTS: 
: None 

tôi thiết lập Org Chế độ sử dụng các dòng sau:

;; enable python for in-buffer evaluation 
(org-babel-do-load-languages 
'org-babel-load-languages 
'((python . t))) 

;; all python code be safe 
(defun my-org-confirm-babel-evaluate (lang body) 
(not (string= lang "python"))) 
(setq org-confirm-babel-evaluate 'my-org-confirm-babel-evaluate) 
+0

Thử 'return print (1 + 1)' có lẽ? Chữ 'return' này có vẻ" thừa "trong mã ban đầu (bên ngoài hàm). – PascalVKooten

Trả lời

13

Có là two ways để nhận được kết quả của một khối nguồn - outputvalue. Bạn trộn chúng lên, do đó những rắc rối.

Khối đầu tiên là tốt.

Để khắc phục khối thứ hai:

#+begin_src python :results value 
return 1+1 
#+end_src 

Để khắc phục khối thứ ba:

#+begin_src python :results output 
print 1+1 
#+end_src 

Khi chế độ đầu ra là value bạn phải return. Chỉ cần đặt nó ở đó giống như bạn đã làm với 1+1 sẽ không hoạt động. Trong phần thứ ba bạn muốn kết quả được in ra, nhưng cài đặt phiên mặc định của bạn là value (giá trị mặc định là output btw).

Và bit này về org-confirm-babel-evaluate là loại không liên quan đến câu hỏi. Tôi chỉ cần đặt nó là nil.

3

Bạn vẫn có thể gặp phải các sự cố như dòng trống gây ra lỗi trong định nghĩa hàm. Giải pháp được đưa ra trong original thread. Tôi cũng đã đăng bên dưới

(setq org-babel-python-command "ipython3 --no-banner --classic --no-confirm-exit") 

;; use %cpaste to paste code into ipython in org mode 
(defadvice org-babel-python-evaluate-session 
(around org-python-use-cpaste 
     (session body &optional result-type result-params) activate) 
     "Add a %cpaste and '--' to the body, so that ipython does the right thing." 
(setq body (concat "%cpaste\n" body "\n--")) 
ad-do-it 
(if (stringp ad-return-value) 
    (setq ad-return-value (replace-regexp-in-string "\\(^Pasting code; enter '--' alone on the line to stop or use Ctrl-D\.[\r\n]:*\\)" "" ad-return-value)))) 
+0

hoạt động tốt @ bowen.li, bạn có thể nhận được âm mưu nội tuyến bằng matplotlib không? – manandearth

Các vấn đề liên quan