如何让scons调用外部脚本?

时间:2009-04-08 12:36:54

标签: python latex scons tex

我正在尝试使用scons来构建一个乳胶文档。特别是,我想让scons调用一个python程序,该程序生成一个包含一个表为\ input {}的文件到主文档中。我查看了scons文档,但我不清楚我需要做什么。

我希望实现的内容基本上是您使用此makefile获得的内容:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

我如何在scons中表达这一点?

2 个答案:

答案 0 :(得分:16)

这些方面应该做的事情 -

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

它声明'document.tex'是通过调用Python脚本生成的,并请求从这个generatd'document.tex'文件创建一个PDF文档。

请注意,这只是精神上的。这可能需要一些调整。特别是,我不确定你想要生成'document.tex'需要什么样的语义 - 它是否应该每次生成?只有它不存在?当其他一些文件发生变化? (您可能希望将此依赖项添加为Command()的第二个参数。)

此外,如果需要,Command()的输出可以用作PDF()的输入。为清楚起见,我没有这样做。

答案 1 :(得分:4)

在这种简单的情况下,最简单的方法是使用子进程模块

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

无论SConstruct文件放在哪里放置这些行,它们都会在SCons执行任何编译和链接之前发生。

缺点是每次运行SCons时都会执行这些命令,而不是仅在文件发生更改时执行,这就是示例Makefile中会发生的情况。因此,如果这些命令需要很长时间才能运行,那么这不是一个好的解决方案。

如果您确实只需要在文件更改时运行这些命令,请查看SCons手册部分Writing Your Own Builders