簡體   English   中英

從Python腳本調用scons

[英]Invoking scons from a Python script

我是scons和Python的新手。 我想知道是否有辦法在python腳本中調用scons。

我的python腳本從用戶接受一個目錄列表,其中要編譯的代碼位於其中(除了執行其他一些非平凡的事情)。 它還生成一個字符串,用作scons創建的可執行文件的名稱。

我想將這些信息從我的python腳本傳遞給scons,然后調用scons。 有一個簡單的方法嗎?

我可以想到以下幾種可能性:

  • 使用subprocess.call("scons"...)我不確定scons是否接受我需要傳遞的所有信息作為命令行參數
  • 讓python腳本寫入文件。 讓SConscript解析文件並獲取傳遞的信息。

嗯,我想這在理論上是可能的。 scons可執行文件本身只是一個python腳本,它只是在修改sys.path變量后執行SCons.Script.main() 但是你可能不得不開始深入挖掘源代碼以真正理解如何讓它做你想做的事情。

一個更清潔的解決方案是從SConscript文件調用您的腳本,這可能是預期的用法,應該更容易。

我已經使用subprocess.call() python函數來完成此操作,以封裝我正在處理的特定項目所需的稍長且復雜的命令行參數。 有些人認為調用應該更簡單,以便不需要封裝它,但這是一個不同的主題:)

考慮而不是使用命令行參數的一個選項是使用此處提到的SCONSFLAGS環境變量。 就個人而言,我不想使用這個選項。

您需要的所有選項都可以作為命令行選項傳遞。 自定義和處理SCons命令行參數的一種好方法是使用SCons AddOption()函數。 此外,您可以使用SCons ARGUMENTS字典獲取簡單的variable=value變量。 其他相關的SCons命令行函數是GetOption()SetOption()

關於傳遞可執行文件名的字符串:SCons可能不喜歡這樣。 至少,考慮使用特定的可執行字符串執行一次腳本,然后再使用不同的可執行字符串執行一次,然后您想要清理,如果SCons沒有使用相同的可執行文件名執行,您最終可能會留下可執行文件。

謝謝你的回答。 我最終使用這種方法:

python腳本將選項列表寫入文本文件,關閉它,並使用子scons -f MySConscript_file調用調用scons -f MySConscript_file SConstruct將文本文件中的值讀入列表,並使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM