【问题标题】:Make the source code from one code block the input to another code block in Emacs org-mode在 Emacs org-mode 中将源代码从一个代码块输入到另一个代码块
【发布时间】:2025-08-21 12:25:18
【问题描述】:

我开始使用 org-mode,我想做一些事情,这似乎应该是可能的,但我无法弄清楚。

让我描述一下场景:我有一些 SQL 代码,我想在远程服务器上执行。我目前有一个 python 脚本,它将 SQL 代码作为字符串并为我执行此操作。如果没有 org-mode,我的工作流程将从这样的文件开始:

echo "SELECT name, grade FROM students" >> basic_query.sql 

然后我会运行:

$ python run_query.py basic_query.sql    

为此,在 org-mode 设置中,我可以为 SQL 创建一个代码块:

#+NAME: basic_query 
#+BEGIN_SRC SQL 
SELECT name, grade FROM students 

#+END_SRC 

然后我有一个 python 调用函数的代码块:

#+BEGIN_SRC python :export results
import sql_helper 
query_status = sql_helper.run_query(<<basic_query>>)  

#+END_SRC 

我可能会用它来创建表格、进一步处理、绘图等。注意 &lt;&lt; &gt;&gt; 显然是不正确的——它只是滥用符号来指示我正在尝试做的事情。

【问题讨论】:

标签: emacs org-mode literate-programming


【解决方案1】:

如果您设置了 emacs/org-mode 以便启用 python 代码(org-babel-do-load-languages 中的(python . t)),您就快到了,我将您的示例更改为

#+NAME: basic_query 
#+BEGIN_SRC SQL 
  SELECT name, grade FROM students 
#+END_SRC 

#+BEGIN_SRC python :export results :noweb yes :tangle yes
import sql_helper 
query = """
    <<basic_query>>
    """
query_status = sql_helper.run_query(query)  

#+END_SRC 

我的蟒蛇有点生锈了,但至少如果我把它缠在一起

import sql_helper 
query = """
    SELECT name, grade FROM students 

    """
query_status = sql_helper.run_query(query)

python 不再抱怨语法,而是抱怨缺少模块 sql_helper...

【讨论】:

  • 如果 basic_queryexample 而不是 src 那么 #+BEGIN_SRC python :var query=basic_query 会起作用。
最近更新 更多