如何让Snakemake Snakefile自动为用户指定目标文件生成报告
解决方案
方法1:利用workflow.targets自动获取目标并生成报告
在你的Snakefile中添加onsuccess规则,通过Snakemake内置的workflow.targets对象直接获取用户命令行指定的所有目标文件,流程执行成功后自动触发报告生成:
onsuccess: # 将目标文件对象转为字符串并拼接成命令行参数格式 target_str = " ".join(str(t) for t in workflow.targets) # 调用snakemake生成报告,此时目标已完成,不会重复执行流程 shell(f"snakemake --report report.html {target_str}")
无论用户指定单个目标(如files/output.txt)还是多个目标,流程结束后都会自动生成对应任务的报告。
方法2:自定义参数控制自动报告(可选)
如果需要给用户保留是否生成报告的选择权,可以添加自定义命令行参数:
# 在Snakefile开头添加参数解析 parser = argparse.ArgumentParser() parser.add_argument("--auto-report", action="store_true", default=False, help="流程完成后自动生成报告") args = parser.parse_args() # 根据参数决定是否开启自动报告 if args.auto_report: onsuccess: target_str = " ".join(str(t) for t in workflow.targets) shell(f"snakemake --report report.html {target_str}")
用户运行时只需加上--auto-report参数即可触发自动报告,不加则不生成,灵活性更强。
注意事项
workflow.targets包含所有用户指定的目标(包括默认目标,若用户未指定具体文件),报告内容会准确匹配本次运行的任务。- 二次调用
snakemake --report时,因所有目标文件已存在,Snakemake不会重复执行流程,仅生成报告,无额外资源消耗。 - 若需自定义报告路径,可将
report.html替换为配置参数(如config["report_path"]),方便用户修改。
内容的提问来源于stack exchange,提问作者Shruteek Mairal
相关产品推荐
相关产品推荐

