使源代码从一个代码块中输入到Emacs组织模式中的另一个代码块

时间:2012-01-31 05:41:29

标签: emacs org-mode literate-programming

我开始使用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 

我可能会用它来创建一个表格,进一步处理,绘制等等。注意<< >>事情是不对的,显然---这只是滥用符号表示我正在尝试做什么。

1 个答案:

答案 0 :(得分:7)

如果您已设置emacs / org-mode以启用python代码((python . t)中的org-babel-do-load-languages),那么您几乎就在那里,我将您的示例更改为

#+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 

我的python有点生疏,但至少如果我纠结于

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

    """
query_status = sql_helper.run_query(query)

python不再抱怨语法,而是关于丢失的模块sql_helper ...