Вызывая проектов SCons из скрипта Python


Я новичок в scons и Python. Мне было интересно, есть ли способ вызвать scons из скрипта python.

Мой скрипт python принимает от пользователя список каталогов, в которых находится код, подлежащий компиляции вместе (в дополнение к выполнению некоторых других нетривиальных вещей). Он также генерирует строку, которая будет использоваться в качестве имени создаваемого исполняемого файла по проектов SCons.

Я хочу передать эту информацию из моего скрипта python в scons, а затем вызвать scons. Есть ли простой способ сделать это?

Я могу думать о следующих возможностях:

  • use subprocess.call("scons"...) я не уверен, что scons принимает всю информацию, которую мне нужно передать в качестве аргументов командной строки
  • пусть скрипт python запишется в файл. Пусть SConscript проанализирует файл и передаст информацию.
3 8

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, что, вероятно, является предполагаемым использованием и должно оказаться намного проще.

Спасибо за ответы. В итоге я использовал этот метод:

Скрипт python записывает список опций в текстовый файл, закрывает его и вызывает scons -f MySConscript_file с помощью вызова подпроцесса. SConstruct считывает значения из текстового файла в список и использует их.