В scons вызвать пользовательскую функцию, используя строитель
У меня есть пользовательская функция, которую я хочу вызвать с помощью объекта Builder
def generate_action(target, source, env):
print "TRIDIP:::::::I am in"
return None
Теперь я создал строителя
env['BUILDERS']['generateAction'] = Builder(action = generate_action)
action = env.generateAction()
Как видите, я не передавал никаких аргументов и не хочу передавать аргументы, для которых не вызывается моя пользовательская функция generate_action(). Я хочу вызвать функцию без каких-либо аргументов.
1 ответ
Вы должны вызвать Builder, указав в качестве источника файл результатов, от которого вы зависите. Вы не можете пропустить параметры "target=" и "source=" одновременно, потому что SCons должен знать, куда в общий график сборки входит этот шаг. Ваш SConscript должен выглядеть примерно так (непроверенный и из верх головы)
# env = Environment()
env['BUILDERS']['generateAction'] = Builder(action = generate_action)
# creates your other result file
myResult = env.someOtherBuilder('out.foo', 'in.txt')
# calls your generate_action method
action = env.generateAction('dummy.txt', myResult)
Обратите внимание, как это всегда будет вызывать ваш построитель "generateAction", потому что "dummy.txt" никогда не создается, поэтому цель никогда не обновляется.
Наконец, я думаю, что этот ответ не очень поможет и приведет вас к большим неприятностям. Когда люди пытаются вызывать пользовательские методы во время сборки, они обычно используют SCons неправильно... большую часть времени, потому что у них нет правильной ментальной модели, чтобы понять, как работает SCons. Возможно, вы захотите ознакомиться с некоторыми основами в Руководстве пользователя ( http://scons.org/doc/production/HTML/scons-user.html) или задать дополнительные вопросы в нашем списке рассылки пользователя по адресу scons-users@scons.org
(см. также http://scons.org/lists.php).