You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WAF中find_program()不支持递归查找,如何实现递归查找程序?

解决WAF中find_program递归查找二进制文件的问题

你遇到的问题确实是因为find_program()默认只会在指定的path_list目录下直接查找,不会递归遍历子目录。这里有两种实用的解决方法:

方法一:手动递归收集所有子目录

通过Python标准库的os.walk遍历目标目录下的所有子目录,把它们全部加入path_list:

import os

def get_all_subdirs(root_dir):
    subdirs = []
    for dirpath, _, _ in os.walk(root_dir):
        subdirs.append(dirpath)
    return subdirs

def configure(ctx):
    # 收集mydir/here下的所有子目录
    all_subdirs = get_all_subdirs('mydir/here')
    ctx.find_program('myexe', var='MYEXE', path_list=all_subdirs)

方法二:使用WAF自带的路径匹配功能

用WAF的ant_glob方法来匹配所有子目录,更贴合WAF的使用习惯:

def configure(ctx):
    # 获取目标根目录对象
    root_dir = ctx.path.find_dir('mydir/here')
    all_subdirs = []
    if root_dir:
        # **/ 匹配所有层级的子目录
        for subdir in root_dir.ant_glob('**/', quiet=True):
            all_subdirs.append(str(subdir.abspath()))
    ctx.find_program('myexe', var='MYEXE', path_list=all_subdirs)

需要注意的是,递归查找会遍历所有子目录,若目录结构较深可能会增加配置阶段的耗时;另外要确保当前用户对目标目录及其子目录有读取权限。

内容的提问来源于stack exchange,提问作者RandomB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:09:55