【问题标题】:How to I get scons to invoke an external script?如何让 scons 调用外部脚本?
【发布时间】:2010-10-18 07:16:19
【问题描述】:

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

我希望实现的基本上就是您使用此 makefile 可以获得的效果:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

如何在 scons 中表达?

【问题讨论】:

    标签: python latex scons tex


    【解决方案1】:

    应该做一些类似的事情-

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

      • 如何与乳胶扫描仪集成?我还能在 SConstruct 中有 PDF(target='document.pdf', source='document.tex') 吗?
      猜你喜欢
      • 2014-05-14
      • 1970-01-01
      • 2010-11-07
      • 1970-01-01
      • 2021-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多