Сделать исходный код из одного кодового блока входным для другого кодового блока в Emacs org-mode - PullRequest
10 голосов
/ 31 января 2012

Я начинаю работать с org-mode и хочу кое-что сделать, кажется, что это возможно, но мне сложно разобраться.

Позвольте мне описать сценарий: у меня есть некоторый код SQL, который я хочу выполнить на удаленном сервере. В настоящее время у меня есть скрипт Python, который принимает код SQL в виде строки и делает это для меня. Без режима org мой рабочий процесс должен начинаться с файла, подобного так:

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

и тогда я бы запустил:

$ python run_query.py basic_query.sql    

Чтобы сделать это в настройке режима org, я мог бы создать блок кода для 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 Ответ

7 голосов
/ 31 января 2012

Если вы настроили 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 ...

...