Как получить scons для вызова внешнего скрипта? - PullRequest
16 голосов
/ 08 апреля 2009

Я пытаюсь использовать scons для создания латексного документа. В частности, я хочу, чтобы scons вызывал программу на python, которая генерирует файл с таблицей \ input {} в основной документ. Я просмотрел документацию по scons, но мне не сразу понятно, что мне нужно делать.

То, чего я хочу достичь, это то, что вы получите с помощью этого make-файла:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

Как я могу выразить это в scons?

Ответы [ 2 ]

16 голосов
/ 08 апреля 2009

Что-то в этом духе должно быть -

env.Command ('document.tex', '', 'python table_generator.py')
env.PDF ('document.pdf', 'document.tex')

Он объявляет, что 'document.tex' генерируется путем вызова скрипта Python, и запрашивает создание документа PDF из этого генерируемого файла 'document.tex'.

Обратите внимание, что это только в духе. Это может потребовать некоторых настроек. В частности, я не уверен, какую семантику вы бы хотели использовать для генерации document.tex - должна ли она генерироваться каждый раз? Только когда его не существует? Когда другой файл меняется? (вы хотите добавить эту зависимость в качестве второго аргумента в Command () в этом случае).

Кроме того, выходные данные Command () могут быть использованы в качестве входных данных для PDF () при желании. Для ясности, я этого не делал.

4 голосов
/ 08 апреля 2009

В этом простом случае проще всего просто использовать модуль подпроцесса

from subprocess import call
call("python table_generator.py")
call("pdflatex document.tex")

Независимо от того, где в вашем файле SConstruct эти строки размещены, они произойдут до того, как SCons выполнит компиляцию и компоновку.

Недостатком является то, что эти команды будут выполняться каждый раз, когда вы запускаете SCons, а не только при изменении файлов, что и происходит в вашем примере Makefile. Так что если выполнение этих команд занимает много времени, это не будет хорошим решением.

Если вам действительно нужно запускать эти команды только после изменения файлов, обратитесь к разделу руководства SCons Написание собственных сборщиков .

...