Вихід джерела блоку в режимі Python завжди ': Ні'


16

Це мій вихідний блок:

#+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 знаходиться на моєму PATH та виконується через термінал.

Блоки SRC Emacs-lisp працюють просто чудово.

Чому я отримую Noneзамість hello?

Відповіді:


17

Це особливість того, як вавилон обробляє деякі мови. Це дає деяку інформацію про python, і повний список варіантів доступний тут . Корисних є досить багато.

В основному, в залежності від мови, є кілька варіантів виводу. Іноді має сенс використовувати стандартний вихід (що printце робить), для інших мов (наприклад, октави), має сенс відображати зображення. Для python типовим є показник value, який показує значення повернення коду, тому зміна оператора друку на повернення призведе до очікуваної поведінки.

У деяких випадках це не дуже корисно, тому його можна змінити, додавши :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.