Вызывая проектов SCons из скрипта Python
Я новичок в scons и Python. Мне было интересно, есть ли способ вызвать scons из скрипта python.
Мой скрипт python принимает от пользователя список каталогов, в которых находится код, подлежащий компиляции вместе (в дополнение к выполнению некоторых других нетривиальных вещей). Он также генерирует строку, которая будет использоваться в качестве имени создаваемого исполняемого файла по проектов SCons.
Я хочу передать эту информацию из моего скрипта python в scons, а затем вызвать scons. Есть ли простой способ сделать это?
Я могу думать о следующих возможностях:
- use
subprocess.call("scons"...)
я не уверен, что scons принимает всю информацию, которую мне нужно передать в качестве аргументов командной строки - пусть скрипт python запишется в файл. Пусть SConscript проанализирует файл и передаст информацию.
3 ответа:
Я сделал это с помощью функции
Один из вариантов, который следует рассмотреть вместо использования аргументов командной строки, - это использовать переменную окруженияsubprocess.call()
python, чтобы инкапсулировать несколько длинных и сложных args командной строки, необходимых для конкретного проекта, над которым я работал. Есть те, кто утверждал, что вызов должен был быть проще, чтобы не нужно было его инкапсулировать, но это другой предмет :)SCONSFLAGS
, Как указано здесь . Лично я предпочитаю этим не пользоваться вариант.Все необходимые параметры могут быть переданы в качестве параметров командной строки. Хороший способ настроить и обработать args командной строки SCons - это функция SConsAddOption () . Кроме того, вы можете получить простые переменные
variable=value
, используя словарь аргументов SCons . Другими связанными функциями командной строки SCons являютсяGetOption () иSetOption () .Что касается передачи строки для имени исполняемого файла: SCons это может не понравиться. В самом начале по крайней мере, предположим, что вы выполняете свой сценарий один раз с определенной исполняемой строкой, затем второй раз с другой, затем вы хотите очистить, Вы можете в конечном итоге оставить исполняемые файлы вокруг, если SCons не выполняется с тем же именем исполняемого файла.
Ну, я думаю, это возможно в теории. Исполняемый файл
scons
сам по себе является всего лишь скриптом python, и все, что он делает, это выполняетSCons.Script.main()
после изменения переменнойsys.path
. Но вам, вероятно, придется начать копать глубоко в источник, чтобы действительно понять, как заставить его делать то, что вы хотите.Гораздо более чистым решением является вызов вашего скрипта из файла SConscript, что, вероятно, является предполагаемым использованием и должно оказаться намного проще.