在我把Python interpreter 改成ipython 之后,如果不带session执行它会打印出所有的输入输出,请问一下这是默认的行为吗?有办法只输出output吗?
在emacs -q下重现需要把shell interpreter 和babel Python command都设置为ipython
如果不把org babel Python command设置为ipython,如果在options 加了session, 则会出现
这也是我要改成ipython的原因(一个好像已经很久了的emacs bug)
总结一下,问题是如果interpreter 是Python那么在session模式下第一次启动时会有一个error ,
如果将python 替换成ipython 没有error, 但是不开session时会打印所有输入。
复现步骤
直接用emacs -a启动
Problem 1:
#+begin_src emacs-lisp
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)))
(setq python-shell-interpreter '"ipython3")
(setq python-shell-interpreter-args '"--simple-prompt")
(setq org-babel-python-command '"python3")
#+End_Src
#+Begin_src python :session :results output
P = 'Hello world'
print(P)
#+end_src
Problem 2:
#+begin_src emacs-lisp
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)))
(setq python-shell-interpreter '"ipython3")
(setq python-shell-interpreter-args '"--simple-prompt")
(setq org-babel-python-command '"ipython --simple-prompt")
#+End_Src
#+Begin_src python :results output
P = 'Hello world'
print(P)
#+end_src
很抱歉之前没有说清楚
GNU Emacs 28.1 (build 2, aarch64-apple-darwin21.6.0, NS appkit-2113.60 Version 12.5 (Build 21G72))
MacOS
1 个赞
没有用过org babel for python,但从这个网页的说明看,
:results {output, value}
: Output results come from whatever the python code prints on stdout. Value results are the value of the last expression evaluated in the code block. Value mode is the default (as with other languages). In value mode you can use the following subtypes: 如果改为value 可以么?
我已经 emacs -Q
验证过。
可以肯定楼主还有其他信息没有交代,这种情况下,猜测和讨论都没有意义。
1 个赞
抱歉,确实不是Emacs 的问题,应该是doom设置的问题.
根据你现在提供的信息,的确可以复现。
以下是我先前的验证步骤和结果,也是我说你信息没有交代完全的原因:
emacs -Q --eval "\
(progn
(setq python-shell-interpreter \"ipython\")
(org-babel-do-load-languages 'org-babel-load-languages '((python . t)))
(switch-to-buffer \"*.org\")
(org-mode)
(insert \"\
#+BEGIN_SRC python :results output
str='Hello, World'
print(str)
#+END_SRC\"))" -nw
手动步骤:
- 运行以上命令
- 按
C-c C-c
结果:
你的 Problem 1
这句有问题:
如果我没理解错,这里不应该用 ipython
。ipython
是用于增强交互体验的,执行代码直接 python
就好了。
Problem 2
用了 :session
在我电脑上会有警告:
Warning (python): Your ‘python-shell-interpreter’ doesn’t seem to support readline, yet ‘python-shell-completion-native-enable’ was t and “python3” is not part of the ‘python-shell
-completion-native-disabled-interpreters’ list. Native completions have been disabled locally.
确实是这样,我之所以用ipython是因为这样在session情况下就不会出警告
#+begin_src emacs-lisp
(org-babel-do-load-languages
'org-babel-load-languages
'((emacs-lisp . t)
(python . t)))
(setq python-shell-interpreter '"ipython3")
(setq python-shell-interpreter-args '"--simple-prompt")
(setq org-babel-python-command '"ipython --simple-prompt")
#+End_Src
#+Begin_src python :session :results output
P = 'Hello world'
print(P)
#+end_src
#+RESULTS:
: Hello world