我正在尝试使用scons来构建一个乳胶文档。特别是,我想让scons调用一个python程序,该程序生成一个包含一个表为\ input {}的文件到主文档中。我查看了scons文档,但我不清楚我需要做什么。
我希望实现的内容基本上是您使用此makefile获得的内容:
document.pdf: table.tex
pdflatex document.tex
table.tex:
python table_generator.py
我如何在scons中表达这一点?
答案 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。