Wyjściowym blokiem źródłowym w trybie Python org jest zawsze „: Brak”


16

To jest mój blok źródłowy:

#+BEGIN_SRC python
print "hello"
#+END_SRC

Dane wyjściowe są zawsze:

#+RESULTS:
: None

Oto moja konfiguracja 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 jest na mojej ŚCIEŻCE i może być wykonywany przez terminal.

Bloki SRC Emacs-lisp działają dobrze.

Dlaczego dostaję Nonezamiast hello?

Odpowiedzi:


17

Jest to szczególny sposób, w jaki babel obsługuje niektóre języki. To daje pewien szczegół na Python, a pełna lista opcji jest dostępna tutaj . Istnieje kilka przydatnych.

Zasadniczo, w zależności od języka, istnieje kilka opcji wyjścia. Czasami warto użyć standardowego wyjścia (co printrobi), w przypadku innych języków (np. Oktawy) sensowne jest wyświetlenie obrazu. W przypadku Pythona wartością domyślną jest valuewartość zwracana przez kod, więc zmiana instrukcji print na return dałaby oczekiwane zachowanie.

W niektórych przypadkach nie jest to bardzo przydatne, więc można to zmienić, dodając :results outputdo pierwszego wiersza bloku źródłowego.


14

W bardzo prostym przypadku jak ten, nie hack I mają tendencję do używania, należy wymienić printz return:

#+BEGIN_SRC python
return "hello"
#+END_SRC

#+RESULTS:
: hello

Ale ogólnie lepszym rozwiązaniem będzie użycie :results output, o czym wspomniał użytkownik 2699.

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

#+RESULTS:
: hello

2
To nie jest hack. :)
Omar,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.