2015-01-09 4 views
1

SCons가 CacheDir에서 제공된 캐시 디렉토리의 아티팩트를 사용 된 하드 링크로 복사 할 때 동작을 재정의하는 방법을 파악하려고합니다.SCons 오버라이드 캐시 복사 기능

def link_or_copy_file(class_instance, src, dst): 
    # do hardlinking instead... 

SCons.Defaults.DefaultEnvironment()._copy_from_cache = link_or_copy_file 
SCons.Defaults.DefaultEnvironment()._copy2_from_cache = link_or_copy_file 

env = Environment() 

env._copy_from_cache = link_or_copy_file 
env._copy2_from_cache = link_or_copy_file 

나의 현재의 시도는 env의 연속적인 사용에 영향을주지 않습니다. 함수 link_or_copy_file은 절대로 호출되지 않습니다. 뭐가 잘못 되었 니?

이 방법으로 파이썬 클래스 멤버 함수를 재정의 (override)하는 것은 불가능합니다.

업데이트 : 또한이 기능이 가능한 회원 _copy_from_cache_copy2_from_cache 우선 나는이 호출 된 env.Decider() 후에이 일을 해요 있습니다.

답변

0

우리는 마침내

import SCons.Environment 
SCons.Environment.Environment._copy_from_cache = link_or_copy_file 
SCons.Environment.Environment._copy2_from_cache = link_or_copy_file 

이 일 것을 알아 냈다.