覆盖 SCons 缓存复制函数
Overriding SCons Cache Copy Function
我正在尝试弄清楚当 SCons 将工件从缓存目录(由 CacheDir 提供)复制到使用的硬链接时如何覆盖行为。
我目前的尝试
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
。怎么了?
难道不能用这种方式重写 Python class 成员函数吗?
Update:另请注意,我在调用 env.Decider()
之后执行此操作,因为此函数可能会覆盖成员 _copy_from_cache
和 _copy2_from_cache
.
我们终于弄明白了
import SCons.Environment
SCons.Environment.Environment._copy_from_cache = link_or_copy_file
SCons.Environment.Environment._copy2_from_cache = link_or_copy_file
成功了。
我正在尝试弄清楚当 SCons 将工件从缓存目录(由 CacheDir 提供)复制到使用的硬链接时如何覆盖行为。
我目前的尝试
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
。怎么了?
难道不能用这种方式重写 Python class 成员函数吗?
Update:另请注意,我在调用 env.Decider()
之后执行此操作,因为此函数可能会覆盖成员 _copy_from_cache
和 _copy2_from_cache
.
我们终于弄明白了
import SCons.Environment
SCons.Environment.Environment._copy_from_cache = link_or_copy_file
SCons.Environment.Environment._copy2_from_cache = link_or_copy_file
成功了。