A saída do bloco de origem do modo org do Python é sempre ': None'

15

Este é o meu bloco de código-fonte:

#+BEGIN_SRC python
print "hello"
#+END_SRC

A saída é sempre:

#+RESULTS:
: None

Esta é a minha configuração 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 está no meu PATH e executável via terminal.

Os blocos SRC do Emacs-lisp funcionam muito bem.

Por que eu recebo em Nonevez de hello?

Mente vazia
fonte

Respostas:

16

Essa é uma peculiaridade de como o babel lida com alguns idiomas. Isso fornece alguns detalhes sobre python, e uma lista completa de opções está disponível aqui . Existem alguns úteis.

Basicamente, dependendo do idioma, existem várias opções de saída. Às vezes, faz sentido usar a saída padrão (o que printfaz), para outros idiomas (por exemplo, oitava), faz sentido exibir uma imagem. Para python, o padrão é value, que mostra o valor de retorno do código, portanto, alterar sua instrução de impressão para um retorno daria o comportamento esperado.

Isso não é muito útil em alguns casos, portanto, pode ser alterado adicionando :results outputà primeira linha do bloco de origem.

user2699
fonte
14

Em um caso muito simples como este, há um truque que eu uso, substitua printpor return:

#+BEGIN_SRC python
return "hello"
#+END_SRC

#+RESULTS:
: hello

Mas, em geral, a melhor solução será usar :results output, conforme mencionado pelo usuário2699.

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

#+RESULTS:
: hello
Brian Z
fonte
2
Isso não é um hack. :)
Omar