在`.smk`文件里,怎么定义一个“搭子”(即一个规则依赖另一个规则的输出,并且它们共享部分配置或资源)?
在Snakemake中,“搭子”关系通常通过规则之间的输入/输出链和全局配置来实现。例如,假设有两个规则`ruleA`和`ruleB`,`B`需要`A`的输出文件,并且它们都使用同一个参数`threads`:
```python
configfile:"config.yaml"#假设config.yaml里定义了threads:4
ruleA:
output:"results/A.txt"
threads:config["threads"]
shell:
"echo'Aoutput'>{output}"
ruleB: input:"results/A.txt" output:"results/B.txt" threads:config["threads"] shell: "cat{input}>{output}&&echo'Bdone'>>{output}" ```
这里`B`就是`A`的“搭子”——它自动等待`A`完成,并共享`threads`配置。更复杂的搭子关系(如共享临时文件或资源池)可以用`pipe`、`temp`或`protected`等修饰符进一步控制。