簡體   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