2013-09-03 15 views
8

Come posso eseguire codice Python molto semplice nella modalità Org di Emacs?Modalità Org Emacs: esecuzione di codice Python semplice

Il primo esempio funziona bene, ma non riesco a farlo mi danno il risultato di calcoli più semplici:

; 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 

Ho impostato la modalità Org utilizzando le seguenti linee:

;; 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

Provare 'return print (1 + 1)' forse? Questo 'return' sembra" extra "nel codice originale (al di fuori della funzione). – PascalVKooten

risposta

13

Ci sono two ways di ottenere il risultato di un blocco di origine - output e value. Li hai mescolati, quindi i problemi.

Il primo blocco va bene.

Per fissare il secondo blocco:

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

Per fissare il terzo blocco:

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

Quando la modalità di uscita è value è necessario return. Basta metterlo lì come hai fatto tu con 1+1 non lo farai. Nel terzo si desidera che il risultato sia stampato, ma l'impostazione predefinita per la sessione è value (il valore predefinito predefinito è output btw).

E questo bit su org-confirm-babel-evaluate è un po 'irrilevante alla domanda. Ho appena impostato su nil.

3

Si possono ancora riscontrare problemi come le righe vuote causano errori nella definizione della funzione. La soluzione è data in original thread. Ho anche postato sotto

(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

che funziona alla grande @ bowen.li, puoi ottenere il plottaggio in linea con matplotlib? – manandearth

Problemi correlati