繁体   English   中英

如何让scons调用外部脚本?

[英]How to I get scons to invoke an external script?

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

我希望实现的基本上是你用这个makefile得到的东西:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

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

沿着这些方向应该做的事情 -

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()的输入。 为清楚起见,我没有这样做。

在这个简单的例子中,最简单的方法是使用子进程模块

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

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

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

如果您确实只需要在文件更改时运行这些命令,请查看SCons手册部分编写自己的构建器

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM