Сделать исходный код из одного блока кода входным для другого блока кода в Emacs org-mode
Я начинаю работать с 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 ответ
Если вы настроили 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
Мой питон немного ржавый, но, по крайней мере, если я запутаю это
import sql_helper
query = """
SELECT name, grade FROM students
"""
query_status = sql_helper.run_query(query)
Python больше не жалуется на синтаксис, а на отсутствующий модуль sql_helper...