Режим организации Emacs: выполнение простого кода python
Как я могу выполнить очень простой Python-код в режиме организации Emacs?
первый пример работает нормально, однако я не могу заставить его дать мне результат простейших вычислений:
; 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
Я настроил режим организации, используя следующие строки:
;; 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)
2 ответов
здесь два варианта получать
результат исходного блока -output
и value
. Вы их перепутали, отсюда и неприятности.
первый блок в порядке.
чтобы исправить второй блок:
#+begin_src python :results value
return 1+1
#+end_src
чтобы исправить третий блок:
#+begin_src python :results output
print 1+1
#+end_src
когда режим вывода является value
вы должны return
. Просто положить его туда, как ты
с 1+1
не будет.
В третьем вы хотите, чтобы результат был напечатан, но ваш сеанс по умолчанию
настройка value
(мои значения по умолчанию output
btw).
и этот бит о org-confirm-babel-evaluate
не имеет отношения к вопросу.
Я просто установил его в nil
.
вы все еще можете столкнуться с такими проблемами, как пустые строки вызывают ошибку в определении функции. Решение дано в исходный поток. Я также разместил ниже
(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))))