从Python脚本调用scons

时间:2013-03-06 14:53:27

标签: python scons

我是scons和Python的新手。 我想知道是否有办法在python脚本中调用scons。

我的python脚本从用户接受一个目录列表,其中要编译的代码位于其中(除了执行其他一些非平凡的事情)。 它还会生成一个字符串,用作创建的可执行文件的名称 由scons。

我想将这些信息从我的python脚本传递给scons,然后调用scons。 有一种简单的方法可以做到这一点吗?

我可以想到以下几种可能性:

  • 使用subprocess.call("scons"...)我不确定scons是否接受我需要传递的所有信息作为命令行参数
  • 将python脚本写入文件。让SConscript解析文件并获取传递的信息。

3 个答案:

答案 0 :(得分:3)

嗯,我想这在理论上是可能的。 scons可执行文件本身只是一个python脚本,它只是在修改SCons.Script.main()变量后执行sys.path。但是你可能不得不开始深入挖掘资源来真正理解如何让它做你想做的事情。

一个更清洁的解决方案是从SConscript文件调用您的脚本,这可能是预期的用法,应该更容易。

答案 1 :(得分:2)

我已经使用subprocess.call() python函数来完成此操作,以封装我正在处理的特定项目所需的稍长且复杂的命令行args。有些人认为调用应该更简单,以便不需要封装它,但这是一个不同的主题:)

考虑而不是使用命令行参数的一个选项是使用SCONSFLAGS环境变量,如上所述here。就个人而言,我不想使用这个选项。

您需要的所有选项都可以作为命令行选项传递。自定义和处理SCons命令行参数的一种好方法是使用SCons AddOption()函数。此外,您可以使用SCons ARGUMENTS dictionary获取简单的variable=value变量。其他相关的SCons命令行函数是GetOption()SetOption()

关于传递可执行文件名的字符串:SCons可能不喜欢这样。至少,考虑使用特定的可执行字符串执行一次脚本,然后第二次使用不同的可执行字符串,然后要清理,如果SCons没有执行相同的可执行文件名,则最终可能会留下可执行文件。< / p>

答案 2 :(得分:1)

感谢您的回答。我最终使用了这种方法:

python脚本将选项列表写入文本文件,关闭它,并使用子进程调用调用scons -f MySConscript_file。 SConstruct将文本文件中的值读入列表,然后使用它们。