2009-04-08 71 views
16

我正在嘗試使用scons來構建一個乳膠文檔。特別是,我想讓scons調用一個python程序來生成一個文件,該文件包含一個\ input {}到主文檔中的表。我查看了scons文檔,但是我不清楚我需要做什麼。如何讓scons調用外部腳本?

我想實現基本上是你會得到什麼與此生成的文件:

document.pdf: table.tex 
    pdflatex document.tex 

table.tex: 
    python table_generator.py 

我怎樣才能在scons的表達呢?

回答

16

沿着這些線路的東西應該做的 -

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

它宣佈,「document.tex」是通過調用Python腳本生成的,並請求PDF文檔將從此generatd「document.tex」創建文件。

請注意,這只是精神上的。它可能需要一些調整。特別是,我不確定您想要生成'document.tex'的哪種語義 - 是否應該每次生成?只有當它不存在?當其他文件更改時? (你會想添加這個依賴作爲Command()的第二個參數)。

另外,如果需要,Command()的輸出可用作PDF()的輸入。爲了清楚起見,我沒有這樣做。

4

在這個簡單的情況下,最簡單的方法是隻使用子模塊不管在你的SConstruct文件中的這些線都放在

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

,他們將之前的任何編譯的發生,並通過鏈接進行SCons的。

不利的一面是,每次運行SCons時都會執行這些命令,而不是僅在文件發生更改時才執行,這將在您的示例Makefile中發生。所以如果這些命令需要很長時間才能運行,這不是一個好的解決方案。

如果您確實需要在文件更改時才運行這些命令,請參閱SCons手冊部分Writing Your Own Builders

+3

這與乳膠掃描儀集成如何?我可以在SConstruct中使用PDF(target ='document.pdf',source ='document.tex')嗎? – saffsd 2009-04-08 13:20:06