Исходный блок Python org-mode выводится всегда ': None'


15

Это мой исходный блок:

#+BEGIN_SRC python
print "hello"
#+END_SRC

Выход всегда:

#+RESULTS:
: None

Это моя конфигурация org-babel:

    (org-babel-do-load-languages
 'org-babel-load-languages
 '((python . t)
   (C . t)
   (calc . t)
   (latex . t)
   (java . t)
   (ruby . t)
   (scheme . t)
   (sh . t)
   (sqlite . t)
   (js . t)))

Python находится на моем пути и исполняется через терминал.

Блоки Emacs-lisp SRC работают просто отлично.

Почему я получаю Noneвместо hello?

Ответы:


16

Это особенность того, как babel работает с некоторыми языками. Это дает некоторые подробности о Python, и полный список опций доступен здесь . Есть немало полезных.

В основном, в зависимости от языка, есть несколько вариантов вывода. Иногда имеет смысл использовать стандартный вывод (что printделает), для других языков (например, октавы) имеет смысл отображать изображение. Для python по умолчанию используется значение value, которое показывает возвращаемое значение кода, поэтому изменение выражения print на return даст ожидаемое поведение.

В некоторых случаях это не очень полезно, поэтому его можно изменить, добавив :results outputв первую строку исходного блока.


14

В очень простом случае, подобном этому, я использую хак, замените его printна return:

#+BEGIN_SRC python
return "hello"
#+END_SRC

#+RESULTS:
: hello

Но в целом лучшим решением будет использование :results output, как упомянуто пользователем 2699.

#+BEGIN_SRC python :results output
print("hello")
#+END_SRC

#+RESULTS:
: hello

2
Это не хак. :)
Омар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.